我有一个NSMutableArray
元素,我希望能够有条件地为某些元素设置自定义标志。例如,如果某些元素返回错误,则对它们进行错误计数。如果计数超过 3,我想从数组中删除这个元素。
实现这种行为的最佳方法是什么?
我有一个NSMutableArray
元素,我希望能够有条件地为某些元素设置自定义标志。例如,如果某些元素返回错误,则对它们进行错误计数。如果计数超过 3,我想从数组中删除这个元素。
实现这种行为的最佳方法是什么?
几个选项:
有一个单独的数组来保存每个对象的计数器。从原始数组中删除一个时,请记住删除它对应的计数器对象。
创建一个包含 int 值和存储在数组中的任何其他对象的小类,并使用该对象填充 NSMutableArray。然后你将把你的对象和错误计数器放在同一个地方
编辑:第二个选项是最具可扩展性的选项,如果您想添加更多标志或其他任何内容。
您最好创建一个充满可变字典的可变数组。这将允许您有两个键对应于数组中的每个索引:
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"];
}
}
如上所述,不需要创建自定义对象:创建一个可变数组,创建一个包含对象/键的字典并将所述字典添加到数组中:
NSMutableArray *myArray = [[NSMutableArray alloc] init] autorelease];
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"John Doe", @"elementName",
[NSNumber numberWithInt:0], @"errorCount",
nil];
[myArray addObject:myDictionary];