我有一个tableViewController,我会偶尔出现。
我已将其创建为属性,在.h
上myTVC *myTable;
和
@property (nonatomic, retain) myTVC *myTable;
然后,在.m上我合成了它并创建了一个getter
@synthesize myTable = _myTable;
和
- (myTVC *) myTable {
if (_myTable == nil) {
_myTable = [[myTVC alloc] init];
}
return _myTable;
}
什么时候使用我只是做
[self presentModalViewController:myTable animated:YES];
[myTable release];
就我的想法而言,myTable的getter将在此时运行并分配tableViewController,但它没有运行且app崩溃告诉我我正在尝试呈现一个nil tableViewController ...
我错过了什么?感谢。
答案 0 :(得分:1)
如果你self.myTable
你正在组装你的myTable
没有存储的myTable
的iVar,你需要@property
,因为你这样做:@synthesize myTable = _myTable;
将创建一个iVar调用_myTable
。
所以你在这里做了两件坏事
要更正您的代码,请执行以下操作:
删除此行:myTVC *myTable;
并做[self presentModalViewController:self.myTable animated:YES];
第三件事在您的代码中也很奇怪
[self presentModalViewController:myTable animated:YES];
[myTable release]; // <---- this line, remove it to
由于您将controller
存储在@property中,我不确定为什么会出现该行。
和第4顺便 UIViewController的默认初始值设定项如下
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
如果您没有.xib,可以通过nil
。
答案 1 :(得分:0)
在
[self presentModalViewController:myTable animated:YES];
[myTable release];
您实际上并没有调用myTable
方法。
做
self.myTable = [self myTable]
第一。虽然我不明白为什么你需要一个myTable方法,而不仅仅是做一个alloc init。