这应该很容易,但不知怎的,它不想为我工作。使用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上做这个非常简单的事情的任何建议?
答案 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]];
}
以下是您的代码段不起作用的原因:
[array addObject:i]
- 您无法向Cocoa集合添加基元[array addObject:@i]
- 您忘记将表达式i
括在括号中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的指针。这没有意义。