我有NSMutableArray
个元素,我希望能够有条件地为某些元素设置自定义标志。例如,某些元素返回错误时的错误计数。如果计数超过3,我想从数组中删除此元素。
实施此类行为的最佳方式是什么?
答案 0 :(得分:3)
一些选择:
为每个对象设置一个单独的数组来保存计数器。从原始数组中删除一个时,请记住删除相应的计数器对象。
创建一个包含int值的小类以及您在数组中存储的任何其他对象,并使用该对象填充NSMutableArray。然后,您将对象和错误计数器放在同一个地方
编辑:第二个选项是最具扩展性的选项,如果您想要添加更多标志或其他内容。
答案 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];