我在将类的实例分配给以下 UITableViewController
子类时遇到问题:
@interface MyTableViewController : UITableViewController </*usual protocols*/>
@property (nonatomic, retain) MyClass *myClass;
@end
我目前正在将 MyClass 的非空实例分配给 MyTableViewController 的实例,如下所示:
MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];
MyClass *nonNullInstanceOfMyClass = [[MyClass alloc] init];
myTableViewController.myClass = nonNullInstanceOfMyClass;
[self.navigationController pushViewController:myTableViewController animated:YES];
[nonNullInstanceOfMyClass release];
[myTableViewController release];
问题是 myClass 在 MyTableViewController 的 viewDidLoad
中是 null
。 为什么会这样?
编辑 #1:我通过 NSLogging 检查 nonNullInstanceOfMyClass 是否不为空。
编辑 #2:提供了更多代码。另外 viewDidLoad
似乎在我推送 View Controller 之前被调用(这可能会导致问题......虽然看起来很奇怪)。
编辑 #3:通过将 self.tableView.delegate = nil;
和 self.tableView.dataSource = nil;
从 init
到 viewDidLoad
。
最佳答案
在实例化 View Controller 和分配给属性之间您是否正在做任何事情? viewDidLoad
不一定在您将 View Controller 推送到导航堆栈时被调用 - 它会在需要加载 View 时被调用。因此,例如,NSLog(@"%@", myTableViewController.view);
将触发 viewDidLoad
,如果您在分配给属性之前执行此操作,那将解释这种行为。
您可以发布实际代码而不是近似代码吗?您可能遗漏了一些重要的细节。
关于objective-c - Objective-c 中的属性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522897/