2

我是一个新手,整天都在工作,准备/观看/寻找解决方案。以下代码有效,但现在如何将整数添加到数组中?

    //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);
4

3 回答 3

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); 
}

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

于 2012-05-11T21:32:44.997 回答
3

这里有几个问题:

  1. 您正在尝试改变(更改)不可变数组。你需要一个NSMutableArray而不是NSArray做你想做的事。(顺便说一句,您的实际NSArray创建代码很好。)
  2. 您的for()循环正在爆炸,主要是因为您没有大括号来分隔代码。如果没有大括号,编译器将使用紧随其后的第一行for作为循环内容。因此,您NSLog()在循环之外,并且obj超出了范围。
  3. 我不知道为什么你的addObject:行周围没有括号,如[array addObject:...]. 那甚至编译了吗?那是复制和粘贴错误吗?
  4. 最后,您不能将裸整数添加到 Cocoa 集合中,例如NSArray. 您需要遵循您之前在代码中正确执行的操作:[array addObject:[NSNumber numberWithInt:7]].

鉴于您使用缩进作为语法,我猜您可能有更多的 Python(或类似)背景?如果是这样,您将不得不快速调整您的一些思维模式,以便在 C 或 Objective-C 中有效地编程。我强烈建议你买一本关于 Cocoa 编程的初学者书籍并从头开始,否则你很快就会感到非常沮丧。

编辑:我注意到在我发布后你添加了括号,所以我点击了上面的#3。这导致了另一个重要的注意事项:确保如果您提出问题,您复制并粘贴了失败的确切代码。永远不要重新输入!

于 2012-05-11T21:28:44.343 回答
1

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

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

笔记

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

NSMutableArray * mutArray = [NSMutableArray arrayWithArray:array]; 
于 2012-05-11T21:23:08.007 回答