1

在我的头文件中,我有:

@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 执行,我的数组就会消失并变为 null,这很烦人,因为我想将它加载到表视图中。

这是该方法的精简版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);
}

我有点不知道为什么它没有被保留。任何帮助将非常感激!

谢谢!

4

2 回答 2

2

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

这意味着您的数组在 viewDidLoad 中仍然为零,因此DoUpdateLabel

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

于 2013-09-09T14:52:31.757 回答
0

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

于 2013-09-09T19:38:32.647 回答