所以我有一个NSMutable数组,我在viewDidLoad中填充,然后我NSLog它,它在控制台中返回NULL ...我已经查看了堆栈溢出和苹果引用,无法找到我的问题的解决方案。
继承我使用的代码:
//Populate array
-(void)populateArray{
[TextArray addObject:@"Text1"];
[TextArray addObject:@"Text2"];
[TextArray addObject:@"Text3"];
[TextArray addObject:@"Text4"];
[TextArray addObject:@"Text5"];
NSLog(@"%@",TextArray);
NSLog(@"%@",[TextArray objectAtIndex:1]);
}
-(void)viewDidLoad
{
TextArray = [[NSMutableArray alloc] init];
[self populateArray];
}
在.h文件中
NSMutableArray *TextArray;
先谢谢了! 马特〜
答案 0 :(得分:3)
您发布的代码中没有足够的信息供我们提供具体答案。可能的情况是,方法没有按照您期望的顺序调用(例如,在viewDidLoad之前从另一个点调用populateArray)。
一些断言应该有助于诊断:
//Populate array
-(void)populateArray
{
assert(nil != self.textArray && "you need to create an array");
[self.textArray addObject:@"Text1"];
[self.textArray addObject:@"Text2"];
[self.textArray addObject:@"Text3"];
[self.textArray addObject:@"Text4"];
[self.textArray addObject:@"Text5"];
assert(5 == [self.textArray count] && "populateArray has been called twice or serious threading error");
NSLog(@"%@",textArray);
NSLog(@"%@",[textArray objectAtIndex:1]);
}
-(void)viewDidLoad
{
assert(nil == self.textArray && "you need to clear your array (e.g. in viewDidUnload) or check if it has already been populated");
self.textArray = [NSMutableArray array];
[self populateArray];
assert(5 == [self.textArray count] && "populateArray has been called twice or serious threading error");
}
最后,如果这个数组永远不会改变,那么在初始化器中创建它会比在懒惰中更简单。如果你担心的话,这样的数组不需要太多内存。
更新构造采用以下形式:
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
{
self = [super initWithNibName:nibName bundle:nibBundle];
if (nil != self){
textArray = [[NSArray alloc] initWithObjects:@"Text1", @"Text2", @"Text3", @"Text4", @"Text5", nil];
// ...
}
return self;
}
最后,viewDidLoad
当然可以在同一个实例上多次调用。系统在低内存条件下卸载(然后懒洋洋地重新加载)视图。