addObject到NSArray

时间:2012-05-11 21:19:41

标签: xcode

我是一名新手,并且一直在整天准备/观看/寻找解决方案。以下代码有效,但现在如何向数组添加整数?

    //this works

    NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:10],
        [NSNumber numberWithFloat:25.96], @"Hello World", nil]; 

   for (id obj in array)
    NSLog(@"%@", obj);

以下返回错误:使用未声明的标识符'obj'

    NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:10],
       [NSNumber numberWithFloat:25.96], @"Hello World", nil]; 

    for (id obj in array) 
        [array addObject:7];
        NSLog(@"%@", obj);

3 个答案:

答案 0 :(得分:6)

你必须使用NSMutabbleArray而不是NSArray动态添加对象,不要忘记[]而arrayWithObjects仅适用于nsarray。试试这个:

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:10]];
[array addObject:[NSNumber numberWithFloat:25.96]];
[array addObject:@"Hello World"];
[array addObject:[NSNumber numberWithInt:7]];

for (id obj in array) {
    NSLog(@"%@", obj); 
}

只需复制粘贴此代码,它将使用您想要的对象启动数组,然后显示它们。

答案 1 :(得分:3)

这里有几个问题:

  1. 您正在尝试改变(更改)不可变数组。您需要NSMutableArray代替NSArray来执行您想要的操作。 (顺便提一下,您的实际NSArray创建代码没问题。)
  2. 您的for()循环正在爆炸,主要是因为您没有大括号来分隔您的代码。如果没有大括号,编译器将使用 for之后的第一行作为循环内容。因此,NSLog()位于循环之外,obj超出范围。
  3. 我不知道为什么你的addObject:行没有括号,就像在[array addObject:...]中一样。甚至编译了吗?这是复制和粘贴错误吗?
  4. 最后,您不能将裸整数添加到Cocoa集合,例如NSArray。您需要按照之前在代码中正确执行的操作进行操作:[array addObject:[NSNumber numberWithInt:7]]
  5. 鉴于你使用缩进作为语法,我猜你可能有更多的Python(或类似)背景?如果是这样,您将不得不快速调整一些思维模式,以便在C或Objective-C中有效地编程。我敦促你得到一本关于Cocoa编程的初学者书,并从一开始就开始,否则你很快就会非常沮丧。

    编辑:我注意到在我发布之后你又添加了一些括号,所以我在上面打了#3。这会产生另一个重要注意事项:确保如果您提出复制并粘贴失败的完全代码的问题。永远不要重新打字!

答案 2 :(得分:1)

这是因为你在for循环中使用缩进只考虑以下行。试试这个

     for (id obj in array) {
         [array addObject:[NSNumber numberWithInt:7]];
         NSLog(@"%@", obj); 
     }

注意

如果你想在初始化后添加对象,我认为你需要使用NSMutableArray。修改循环的集合也不是一个好主意(在这种情况下,循环将永远不会结束,因为你继续将一个对象添加到循环中的数组中)。您可以使用此行创建数组的可变版本。

NSMutableArray * mutArray = [NSMutableArray arrayWithArray:array];