【问题标题】:Unable to set property on DetailViewController in an iPad app无法在 iPad 应用程序中设置 DetailViewController 的属性
【发布时间】:2011-03-01 16:33:57
【问题描述】:

编辑:想通了。我能够使用 appDelegate.detailViewController.thisRequest = aRequest;通过 appDelegate 实例访问该属性;

我正在将一个相当简单的基于 iPhone 导航的应用程序移植到一个拆分视图 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;

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

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,但我不知道该怎么做。

【问题讨论】:

    标签: objective-c cocoa-touch ipad


    【解决方案1】:

    编辑:想通了。我能够使用 appDelegate.detailViewController.thisRequest = aRequest;通过 appDelegate 实例访问该属性;

    继续下一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2012-01-28
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多