2013-02-20 67 views
1

所以我有一个学生姓名的数组。我正在运行测试数据,所以我正在经历一个循环分配和初始化每个学生,然后把它扔在stuArr - 如果我NSLog我的Student.h init()方法它会给我我想要的名字,但当我尝试打电话他们在我的方法之外,我得到空值:Array保持返回空

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    for (int i = 0; i < 5; i++) { 
     stuArr = [stuArr arrayByAddingObject:[[Student alloc] init]]; 
     id test = [stuArr objectAtIndexedSubscript:i]; 
     NSLog(@"%@", [test stuName]); 
    } 
} 

我在这里失去了一些重要的东西吗?如果需要,我可以扔在我的Student.m文件,但一切似乎都很好。

+1

也许你忘了alloc + init数组'stuArray'? – 2013-02-20 20:29:29

+0

这不就是它在循环中做什么?现在我将NSArray作为一个在.m文件中合成的属性。 – 2013-02-20 20:30:40

+0

那么你的学生指定的名字是? – 2013-02-20 20:30:47

回答

5

我猜你应该ALLOC +初始化stuArr此行之前:

stuArr = [stuArr arrayByAddingObject:[[Student alloc] init]]; 

或尝试做这样的事情:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSMutableArray *mutStudentsArray = [NSMutableArray array]; 

    for (int i = 0; i < 5; i++) 
    { 
     [mutStudentsArray addObject:[[Student alloc] init]]; 
     id test = [mutStudentsArray objectAtIndex:i]; 
     NSLog(@"%@", [test stuName]); 
    } 

    stuArr = [NSArray arrayWithArray:mutStudentsArray]; 
} 
+1

是的,这是错的。 'stuArr = [[NSArray alloc] init]' – 2013-02-20 20:39:59

+0

@Howdy_McGee,你的意思是[[[NSMutableArray alloc] init]',对吧? – CodaFi 2013-02-20 20:42:57

+0

现在它只是静态的。我只是使用测试数据,所以我没有看到需要让我变化。 – 2013-02-20 20:44:47

1

tikhop是正确的:如果你填写的阵列for循环你应该在填充它之前初始化NSMutableArray(可变数组,因为你正在改变循环中的数组)。在循环中用[array addObject:id]将对象添加到数组中。

[array arrayByAddingObject:id]所做的是创建接收数组的副本并将新对象添加到最后。 这意味着使用你需要做类似下面的(没有多大意义,这样做在for循环,虽然,但也许有助于理解):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSArray *stuArr = [NSArray alloc] init]; //stuArr can be used now 

    for (int i = 0; i < 5; i++) { 
     //someCopiedArr is some existing array- arrayByAddingObject will copy someArr and add an object 
     stuArr = [someArr arrayByAddingObject:[[Student alloc] init]]; 
     id test = [stuArr objectAtIndexedSubscript:i]; 
     NSLog(@"%@", [test stuName]); 
    } 
} 

到底stuArr将会是someArr的副本,只是将对象添加到最后。