Как удалить объект NSMutableArray по ключу? - PullRequest
1 голос
/ 27 августа 2011

Я структурировал NSMutableArray, и вот пример

({Счет = A; Тип = Электричество;}, {Счет = B; Тип = Вода;}, {Счет = 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 ]

8 голосов
/ 27 августа 2011

Если вы на самом деле используете массив, а не словарь, вам нужно найти элемент, прежде чем вы сможете удалить его:

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

if (index != NSNotFound) {
    [data removeObjectAtIndex:index];
}
0 голосов
/ 27 августа 2011

NSArray похож на список указателей, каждый указатель указывает на объект.

Если вы вызываете:

[someArray removeObject:@"B"];

Вы создаете новый объект NSString, который содержитСтрока "B".Адрес этого объекта отличается от объекта NSString в массиве.Поэтому NSArray не может найти его.

Вам нужно будет пройти через массив и определить, где находится объект, затем вы просто удалите его, используя removeObjectAtIndex:

0 голосов
/ 27 августа 2011

Альтернатива: попробуйте 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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...