为什么myArray没有被初始化?

问题描述:

- (id)initWithStyle:(UITableViewStyle)style { 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    self = [super initWithStyle:style]; 
    if (self) { 
     myArray = [[NSMutableArray alloc]init]; 
     NSLog(@"ARRAY INITIALIZED"); //THIS NEVER OCCURS 
    } 
    return self; 
} 
+0

而如果你把NSLog放在函数的开头呢? – mathk 2011-05-01 01:05:14

+0

函数只是不被调用。我什么也没得到。 – jini 2011-05-01 02:44:21

我会建议只是把你的初始化代码在viewDidLoadviewDidAppear。你需要确保你不会多次(和进程中的孤立内存)alloc,但它会被调用,不管它是以xib还是以编程方式装配。

- (void)viewDidLoad 
{ 
    if(!myArray) 
    { 
     myArray = [[NSMutableArray alloc] init]; 
    } 
} 

我真的不能从给定的代码告诉,但如果你让你的控制器编程,确保你初始化你的子类:

[[MyCustomTableViewController alloc] initWithStyle:style]; 

不是UITableViewController

[[UITableViewController alloc] initWithStyle:style]; 

您是以编程方式创建表还是在Interface Builder中创建表?如果它在界面构建器中,那么您需要改写-(id) initWithCoder:(NSCoder *)coder

+0

我只是继承。 @interface InboxTableViewController:UITableViewController { \t \t NSMutableArray * myArray; } – jini 2011-05-01 00:08:13

发现initWithStyle永远不会被调用。我忘了提,初始窗口建立IB,所以我自定义控制器从厦门国际银行叫,我必须覆盖的initWithCoder ....

http://www.iosdeveloperforums.com/thread-initwithstyle-overriding

+0

如果是这种情况,那么initWithCoder被调用,你需要移动你的init代码。 – slycrel 2011-05-01 23:38:42

+0

这几乎就是我的答案所说的。 – 2011-05-03 14:52:11