NSMutableArray,int值从1到100

时间:2014-03-03 17:37:58

标签: ios objective-c

这应该很容易,但不知怎的,它不想为我工作。使用iOS 7和XCode 5。 我要做的就是创建一个值为1到100的数组。

NSMutableArray *array;
for (int i = 0; i < 100; i++)
{
    [array addObject:i];
}

这不起作用。我得到一个“隐含的'int'转换为'id'是不允许使用ARC的。 我明白了,我无法将原始类型添​​加到NSMutableArray。

    [array addObject:@i];

这也不起作用。我在程序中得到了“意外的'@”

    [array addObject:[NSNumber numberWithInt:i]];
    [array addObject:[NSNumber numberWithInteger:i]];

(任何一种情况)这“工作”(编译)但它确实没有“工作”。这个问题是NSNumber的值真的不是1-100。我每行得到的是“147212864”,147212832“,”147212840“......不是我想要的。

最后:

for (NSNumber *i = 0; i < [NSNumber numberWithInteger:100]; i++)
{
    [array addObject:i];
}

这也无法编译。我在i ++上收到错误。 “指向接口'NSNumber'的指针算法,这不是这个架构和平台的常量大小”

关于如何在obj-c上做这个非常简单的事情的任何建议?

5 个答案:

答案 0 :(得分:3)

其中任何一个都应该有效:

NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < 100; i++) {
    [array addObject:@(i)];
}

NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < 100; i++) {
    [array addObject:[NSNumber numberWithInt:i]];
}

以下是您的代码段不起作用的原因:

  1. [array addObject:i] - 您无法向Cocoa集合添加基元
  2. [array addObject:@i] - 您忘记将表达式i括在括号中
  3. NSNumber *i = 0; i < [NSNumber numberWithInteger:100]; i++ - 如果不首先“展开”其值,则无法增加NSNumber

答案 1 :(得分:1)

如果记忆有效,我认为你只是在NSNumber简写表达式旁边缺少括号。

NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSUInteger i = 0; i < 100; i++)
{
    [array addObject:@(i)];
}

答案 2 :(得分:1)

最低限度,@i应为@(i),如here所述。您也忘记分配和初始化数组

NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < 100; i++) {
    [array addObject:@(i)];
}

因为你得到:"147212864", 147212832", "147212840"...not what I want.,我认为你可能错误地打印出你的信息,或者因为数组是未分配的,这只是垃圾。你能告诉我们你是如何输出的吗?

答案 3 :(得分:0)

 NSMutableArray *array = [[NSMutableArray alloc] init];
 NSNumber *myNum;
 for (int i = 0; i < 100; i++) {

     myNum = [[NSNumber alloc]initWithInt:i];
     [array addObject:myNum];
 }
 NSLog(@"%@", array); // 1 - 99 as expected

为我工作:)

答案 4 :(得分:-1)

只是说:在Xcode项目中打开所有合理的警告。然后阅读警告说的内容并对它们采取措施。当你写像

这样的东西
for (NSNumber *i = 0; i < [NSNumber numberWithInteger:100]; i++)

for循环有什么作用?一个对象最后是一个指针。所以你初衷我就是零。然后将指针与随机指针进行比较:[NSNumber numberWithInteger:100]返回指向对象的指针,该对象可以在内存中的任何位置,并比较指针。接下来的i ++:不,你不能增加指向NSNumber的指针。这没有意义。