在NSMutableArray中设置元素的标志

时间:2012-12-20 13:12:15

标签: iphone objective-c ios cocoa-touch nsmutablearray

我有NSMutableArray个元素,我希望能够有条件地为某些元素设置自定义标志。例如,某些元素返回错误时的错误计数。如果计数超过3,我想从数组中删除此元素。

实施此类行为的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

一些选择:

  1. 为每个对象设置一个单独的数组来保存计数器。从原始数组中删除一个时,请记住删除相应的计数器对象。

  2. 创建一个包含int值的小类以及您在数组中存储的任何其他对象,并使用该对象填充NSMutableArray。然后,您将对象和错误计数器放在同一个地方

  3. 编辑:第二个选项是最具扩展性的选项,如果您想要添加更多标志或其他内容。

答案 1 :(得分:1)

你最好创建一个充满可变字典的可变数组。这将允许您有两个键对应于数组中的每个索引:

NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                          @"some text, or what ever you want to store",@"body",
                                          [NSNumber numberWithUnsignedInteger:0],@"errorCount",
                                          nil];

[myMutableArray addObject:mutableDictionary];

然后,这是一个如何增加数组中特定项的错误计数的基本示例:

- (void)errorInArray:(NSUInteger)idx
{
    if ([[[myMutableArray objectAtIndex:idx] objectForKey:@"errorCount"] unsignedIntegerValue] == 2) {
        [myMutableArray removeObjectAtIndex:idx];
    }else{
        NSUInteger temp = [[[myMutableArray objectAtIndex:idx] objectForKey:@"errorCount"] unsignedIntegerValue];
        temp ++;
        [[myMutableArray objectAtIndex:idx] setObject:[NSNumber numberWithUnsignedInteger:temp] forKey:@"errorCount"];
    }
}

答案 2 :(得分:1)

如上所述,不一定需要创建自定义对象: 创建一个可变数组,创建一个包含对象/键的字典,并将所述字典添加到数组中:

NSMutableArray *myArray = [[NSMutableArray alloc] init] autorelease];
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                             @"John Doe", @"elementName",
                             [NSNumber numberWithInt:0], @"errorCount",
                             nil];
[myArray addObject:myDictionary];