苹果手机 。 tableViewController的getter

时间:2012-01-12 03:40:22

标签: ios uitableview

我有一个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 ...

我错过了什么?感谢。

2 个答案:

答案 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。