NSMutableArray在ViewDidLoad之前发布

时间:2013-09-09 14:48:36

标签: iphone ios objective-c cocoa-touch

在我的头文件中,我有:

@property (nonatomic, retain) NSMutableArray * array1;

并在我的initWithNibName方法中:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization

    self.array1 = [[NSMutableArray alloc] initWithObjects:@"test", nil];


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(DoUpdateLabel:) name:@"DoUpdateLabel" object:nil];

}
return self;
}

DoUpdateLable方法对数组进行了一些更新(添加了许多项)。一旦完成并且ViewDidLoad执行我的数组就会消失并变为空,这很烦人,因为我想将它加载到表视图中。

这是DoUpdateLable方法的精简版本。我不得不削减它,因为实际的方法包括很多JSON解析和URL请求:

-(void)DoUpdateLabel:(NSNotification *) notification
{   
int count = 0;
while(count < 59)
{
    NSString * currentpatname = @"test1";
    if(![currentpatname isEqualToString:@""])
    {
        [self.array1 addObject:currentpatname];
        NSLog(@"array: %@", self.array1);
    }
    count++;
}

NSLog(@"final array: %@", self.array1);
}

我有点担心它为什么不被保留。任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:2)

查看更新后的问题,您将在以// Custom initialization开头的范围内设置该数组。但你没注意到的是viewDidLoad实际上是在这一行上被调用的: self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

这意味着你的数组在viewDidLoad中仍然是nil,因此DoUpdateLabel

我建议改为在-viewDidLoad内初始化该数组,然后您会看到您正在寻找的结果。

答案 1 :(得分:0)

initWithNibName:bundle:如果你只是在某处使用alloc init,就会调用它。你可能已经这样做了,但你不应该这样做。删除它,并将你在问题中的代码放在initWithCoder:中,然后它应该正常工作。