allItems
是 NSMutableArray
当用户单击加号按钮时,方法 createItem
被叫。我试图只为每个偶数索引添加对象(类 BNRItem
),所以我尝试放置 NSNull
的实例对于奇数索引:
-(BNRItem *)createItem {
BNRItem *p = [[BNRItem alloc] init];
if ([allItems count] == 0)
[allItems addObject: p];
else {
[allItems addObject: [NSNull null]];
[allItems addObject: p];
}
return p;
}
点击加号按钮3次后的输出是这样的:
2012-09-03 13:20:13.876 Homepwner[718:f803] Index: 0 item: Laptop (123): Worth $60, recorded on (September)
2012-09-03 13:20:13.876 Homepwner[718:f803] Index: 1 item: <null>
2012-09-03 13:20:13.877 Homepwner[718:f803] Index: 2 item: Brush (234): Worth $14, recorded on (September)
2012-09-03 13:20:13.882 Homepwner[718:f803] Index: 1 item: <null>
2012-09-03 13:20:13.882 Homepwner[718:f803] Index: 4 item: Calculator (345): Worth $19, recorded on (September)
如果我继续单击加号按钮,<null>
对象始终保持在索引 1,而不是递增到 3、5 等。我想知道为什么会这样以及如何解决它。
最佳答案
您没有显示日志记录的代码,但是根据结果,我想说您正在做类似的事情:
for( id obj in arr ){
NSLog(@"Index: %lu item: %@", [arr indexOfObject:obj], obj);
}
indexOfObject:
方法查找 obj
等于数组中某个项目的最低索引。由于 [NSNull null]
始终为您提供相同的对象(它是单例),因此当循环中的 obj
是 NSNull
时, indexOfObject:
将始终在 1 处停止搜索。
for
-in
循环将始终按顺序遍历数组,因此您可以保留一个计数器来打印当前索引:
NSUInteger idx = 0;
for( id obj in arr ){
NSLog(@"Index: %lu item: %@", idx++, obj);
}
或使用“常规”for
循环:
NSUInteger count = [arr count];
for( NSUInteger i = 0; i < count; i++ ){
NSLog(@"Index: %lu item: %@", i, [arr objectAtIndex:i]);
}
最后,如果您只是记录它,数组将打印自身并将描述
发送到其包含的每个项目:NSLog(@"%@", arr);
。这是按顺序进行的,因此除非您确实需要附加索引,否则我建议您这样做。
关于objective-c - NSMutableArray 中的 NSNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252193/