xcode 如何通过键删除 NSMutableArray 对象?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7212320/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 21:49:07  来源:igfitidea点击:

how to remove an NSMutableArray object by key?

objective-ciosxcode

提问by Mahmoud

i have structured an NSMutableArray and here is an example

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

( { Account = A; Type = Electricity; }, { Account = B; Type = Water; }, { Account = C; Type = Mobile; } )

( { Account = A; Type = Electricity; }, { Account = B; Type = Water; }, { Account = C; Type = Mobile; } )

when i try to delete Account B using

当我尝试使用删除帐户 B 时

[data removeObject:@"B"];

[数据删除对象:@"B"];

Nothing Happens

没发生什么事

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

回答by jtbandes

If you're actually using an array and not a dictionary, you need to search for the item before you can remove it:

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

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

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

回答by Dair

Alternative: try a NSMutableDictionary:

替代方案:尝试一个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"];

回答by Antwan van Houdt

An NSArrayis like a list of pointers, each pointer points to an object.

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

If you call:

如果你打电话:

[someArray removeObject:@"B"];

You create a new NSStringobject that contains the string "B". The address to this object is different from the NSStringobject in the array. Therefore NSArraycannot find it.

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

You will need to loop through the array and determine where the object is located, then you simply remove it by using removeObjectAtIndex:

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