数组保持返回空

时间:2013-02-20 20:24:57

标签: ios objective-c arrays object

所以我有一系列学生姓名。我正在运行测试数据所以我要经历一个循环分配和初始化每个学生,然后把它扔进stuArr - 如果我NSLog我的Student.h init()方法,它会给我我的名字我会期待,但当我尝试在我的方法之外调用它时,我得到空值:

- (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文件,但一切似乎都很好。

2 个答案:

答案 0 :(得分:5)

我想你应该在这行之前分配+ init 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 :(得分: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的副本,只是将对象添加到最后。