0

我有一个NSMutableArray元素,我希望能够有条件地为某些元素设置自定义标志。例如,如果某些元素返回错误,则对它们进行错误计数。如果计数超过 3,我想从数组中删除这个元素。

实现这种行为的最佳方法是什么?

4

3 回答 3

3

几个选项:

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

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

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

于 2012-12-20T13:14:43.360 回答
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"];
    }
}
于 2012-12-20T14:26:48.107 回答
1

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

NSMutableArray *myArray = [[NSMutableArray alloc] init] autorelease];
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                             @"John Doe", @"elementName",
                             [NSNumber numberWithInt:0], @"errorCount",
                             nil];
[myArray addObject:myDictionary];
于 2012-12-20T17:22:35.373 回答