2011-03-01 26 views
1

編輯:想通了。我可以通過appDelegate.detailViewController.thisRequest = aRequest通過appDelegate實例訪問該屬性;無法在iPad應用中的DetailViewController上設置屬性

我正在將一個相當簡單的基於iPhone導航的應用程序移植到Split View iPad應用程序。 我在主視圖上有兩個嵌套級別的導航。用戶從第一個表中選取一個值並加載第二個表。在第二張桌子上選擇一個值將加載詳細信息視圖的詳細信息項目。或者它應該。它讓我在沒有錯誤的情況下在DetailViewController上設置屬性,但它似乎並未實際設置它。它只是空。

我很接近地跟蹤SplitView模板。我只是通過添加第二個TableViewController來真正擺脫困境。我的RootViewController在didSelectRowAtIndexPath上加載第二個TableViewController,並且該部分正在工作。在我的第二個TableViewController.m我試圖設置DetailView的詳細項目。在didSelectRowAtIndexPath中,我能夠獲取我的細節的對象,但是當我設置它時,它沒有設置。

下面的代碼:

首先,在我的DetailViewController,我設置了該對象的屬性將填充我的字段(* thisRequest):

DetailViewController.h:

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> { 

UIPopoverController *popoverController; 
UIToolbar *toolbar; 

Request *thisRequest; 
} 

DetailViewController.m:

@interface DetailViewController() 
@property (nonatomic, retain) UIPopoverController *popoverController; 
- (void)configureView; 
@end 

@implementation DetailViewController 

@synthesize toolbar, popoverController, detailItem, detailDescriptionLabel; 
@synthesize thisRequest; 

然後,在我的第2個表格ViewController,我嘗試保持對DetailViewController的引用(我懷疑這是我搞亂的地方;我仍然不完全理解事情是如何持續的,以及如何在這個框架中引用它們)。

RequestsTableViewController.h:

@class TrackerSplitViewAppDelegate, RequestsTableViewController, DetailViewController; 

@interface RequestsTableViewController : UITableViewController { 
    NSString* selectedDepartmentID; 
    NSMutableArray *requests; 
    DetailViewController *detailViewController; 
} 

@property (nonatomic, retain) NSString* selectedDepartmentID; 
@property (retain, nonatomic) NSMutableArray *requests; 
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController; 

RequestsTableViewController.m:

@implementation RequestsTableViewController 

@synthesize selectedDepartmentID; 
@synthesize requests; 
@synthesize detailViewController; 

<snip> 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row]; 
    detailViewController.thisRequest = aRequest;  
    NSLog(@"Request Loaded: %@", aRequest.Title); 
    NSLog(@"detailViewController.thisRequest: %@", detailViewController.thisRequest.Title); 
    [appDelegate release]; 

} 

的aRequest對象加​​載就好,並且detailViewController.thisRequest = aRequest;行沒有錯誤運行,但我的日誌輸出看起來是這樣的:

2011-03-01 10:07:22.584 TrackerSplitView [8162:40B]請求加載:MyTitleString 2011-03-01 10:07:22.585 TrackerSplitView [8162:40b] detailViewController.thisRequest:(null)

就像我說的,我仍然不完全理解在iOS框架中如何傳遞所有東西,但SplitNavigation模板的功能幾乎與id相同價值,它工作正常。我可以看到的唯一區別是導航層不是嵌套的,因爲它是一個整數而不是自定義對象,所以它們也不使用指針作爲id。
我猜我沒有正確地將detailViewController傳遞給我的RequestTableViewController,但我看不出如何去做。

回答

0

編輯:想通了。我可以通過appDelegate.detailViewController.thisRequest = aRequest通過appDelegate實例訪問該屬性;

進入下一個錯誤。

相關問題