【问题标题】:NSMutableArray with int values from 1 to 100NSMutableArray 的 int 值从 1 到 100
【发布时间】:2014-03-03 17:37:58
【问题描述】:

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

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

这不起作用。我收到“ARC 不允许将 'int' 隐式转换为 'id'。 我明白了,我不能将原始类型添​​加到 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 上做这个极其简单的事情有什么建议吗?

【问题讨论】:

  • 至少,@i 应该是@(i)
  • 别忘了,在另一端,您需要在 NSNumber 上执行 intValue 才能获得 int
  • @TooManyEduardos。那是因为你忘了分配和初始化你的数组。
  • 或者从1循环到&lt;=100等
  • 当你得到 "147212864", 147212832", "147212840" 是因为你错误地输出了值。很明显这些是指针值,而不是存储在这些位置的对象中的值.

标签: ios objective-c


【解决方案1】:

其中任何一个都可以工作:

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

以下是您的代码 sn-ps 不起作用的原因:

  1. [array addObject:i] - 您不能将原语添加到 Cocoa 集合中
  2. [array addObject:@i] - 您忘记将表达式 i 括在括号中
  3. NSNumber *i = 0; i &lt; [NSNumber numberWithInteger:100]; i++ - 如果不先“解包”它的值,就不能增加 NSNumber

【讨论】:

  • 该死的括号。谢谢。
【解决方案2】:

如果没记错的话,我认为您只是缺少 NSNumber 速记表达式周围的括号。

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

【讨论】:

  • 除非您先分配并初始化数组,否则这是行不通的。 NSMutableArray *array = [NSMutableArray array]
  • @ahwulf 绝对正确。我采用了问题中发布的代码,只关注NSNumber 文字的问题。我会针对您对这个问题的任何未来访问者的疑虑进行编辑。
【解决方案3】:

至少,@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.,我认为你可能错误地打印出你的信息,或者因为数组未分配,那简直就是垃圾。你能告诉我们你是如何输出的吗?

【讨论】:

    【解决方案4】:
     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
    

    为我工作:)

    【讨论】:

    • “1 - 99 符合预期”。好吧,我希望 0 到 99(来自你的代码)。
    • 我的童年是个谎言
    【解决方案5】:

    只是说:在你的 Xcode 项目中打开所有合理的警告。然后阅读警告的内容并对其进行处理。当你写类似的东西时

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2014-05-09
      • 2020-06-17
      • 2012-03-19
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多