在我的头文件中,我有:
@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);
}
我有点担心它为什么不被保留。任何帮助将不胜感激!
谢谢!
答案 0 :(得分:2)
查看更新后的问题,您将在以// Custom initialization
开头的范围内设置该数组。但你没注意到的是viewDidLoad
实际上是在这一行上被调用的:
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
这意味着你的数组在viewDidLoad中仍然是nil,因此DoUpdateLabel
我建议改为在-viewDidLoad
内初始化该数组,然后您会看到您正在寻找的结果。
答案 1 :(得分:0)
initWithNibName:bundle:如果你只是在某处使用alloc init,就会调用它。你可能已经这样做了,但你不应该这样做。删除它,并将你在问题中的代码放在initWithCoder:中,然后它应该正常工作。