无法在iPad应用中的DetailViewController上设置属性

时间:2011-03-01 16:33:58

标签: objective-c cocoa-touch ipad

编辑:想出来。我可以使用appDelegate.detailViewController.thisRequest = aRequest通过appDelegate实例访问该属性;

我正在将一个相当简单的基于iPhone导航的应用程序移植到Split View iPad应用程序。 我在主视图上有两个嵌套的导航级别。用户从第一个表中选择一个值,然后加载第二个表。在第二个表上选择一个值会加载详细信息视图的Detail项。或者它应该是。它允许我在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;

然后,在我的第二个TableViewController中,我尝试维护对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; line运行没有错误,但我的日志输出如下所示:

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,但我没有看到如何做到这一点。

1 个答案:

答案 0 :(得分:0)

编辑:想出来。我可以使用appDelegate.detailViewController.thisRequest = aRequest通过appDelegate实例访问该属性;

接下来的bug。