我已经构建了一个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];
}
答案 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: