如何通过键删除NSMutableArray对象?

时间:2011-08-27 03:13:02

标签: objective-c ios xcode

我已经构建了一个NSMutableArray,这是一个例子

  

(           {           账户= A;           Type =电力;       },           {           帐户= B;           Type = Water;       },           {           帐户= C;           Type = Mobile;       })

当我尝试使用

删除帐户B.
  

[data removeObject:@“B”];

什么都不会发生

[[NSUserDefaults standardUserDefaults] synchronize];
NSArray *archivedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]];
if (archivedArray == nil) {
    data = [[NSMutableArray alloc] init];           
} else {
    data = [[NSMutableArray alloc] initWithArray:archivedArray];
}

3 个答案:

答案 0 :(得分:8)

如果您实际使用的是数组而不是字典,则需要先搜索该项目,然后才能将其删除:

NSUInteger index = [data indexOfObjectPassingTest:^BOOL (id obj, NSUInteger idx, BOOL *stop) {
    return [[(NSDictionary *)obj objectForKey:@"Account"] isEqualToString:@"B"];
}];

if (index != NSNotFound) {
    [data removeObjectAtIndex:index];
}

答案 1 :(得分:0)

替代方案:尝试NSMutableDictionary

NSArray *accounts = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
NSArray *types = [NSArray arrayWithObjects:@"Electricity", @"Water", @"Mobile", nil];

NSMutableDictionary* data = [NSMutableDictionary dictionaryWithObjects:types forKeys:accounts];
[data removeObjectForKey:@"B"];

答案 2 :(得分:-1)

NSArray就像一个指针列表,每个指针都指向一个对象。

如果你打电话:

[someArray removeObject:@"B"];

您创建一个包含字符串“B”的新NSString对象。此对象的地址与数组中的NSString对象不同。因此NSArray无法找到它。

您需要遍历数组并确定对象的位置,然后使用removeObjectAtIndex:

删除它