objective-c - NSMutableArray 中的 NSNull

标签 objective-c cocoa nsmutablearray

allItemsNSMutableArray当用户单击加号按钮时,方法 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] 始终为您提供相同的对象(它是单例),因此当循环中的 objNSNull 时, 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/

相关文章:

swift - 可编辑 NSTextView 中的链接(如 Apple 的 Notes)

objective-c - 重用 NSMutableArray

objective-c - 在 Objective-C 中如何判断一个目录是否可写?

ios - 从 NSPropertyDescription 对象数组中提取名称数组的魔术命令

ios - 无法在 iOS 7 上加载最高排行榜分数

当我使用 subview 调用父 View 时,iOS UIPageControl 不显示正确的页码

objective-c - 如何在 NSTableView 中重用单元格?

ios - 如何让 UILabel 每秒更改 NSArray 中每个项目的文本,然后再次旋转?

objective-c - NSMutableArray removeLastObject 异常

objective-c - 将行 NSRuleEditor 与数组绑定(bind)