Как проверить, существует ли значение в NSDictionary в массиве словарей - PullRequest
3 голосов
/ 14 сентября 2010

Название немного сбивает с толку ... Я объясню

У меня есть NSMutableArray Я заполняюсь NSMutableDictionary объектами. Я пытаюсь сделать, прежде чем объект словаря будет добавлен в массив, и мне нужно проверить, содержит ли какой-либо из словарей значение, равное идентификатору, который уже установлен.

Пример:

Шаг 1: Нажата кнопка, устанавливающая идентификатор объекта для использования при создании вида.

Шаг 2: В указанном представлении нажимается другая кнопка, чтобы сохранить часть содержимого в словаре, а затем добавить указанный словарь в массив. Но если установленный идентификатор уже существует в качестве значения для одного из ключей словаря, не вставляйте этот словарь.

Вот мой код, который в настоящее время не работает:

-(IBAction)addToFavorites:(id)sender{
    NSMutableDictionary *fav = [[NSMutableDictionary alloc] init];
    [fav setObject:[NSNumber numberWithInt:anObject.anId] forKey:@"id"];
    [fav setObject:@"w" forKey:@"cat"];

    if ([dataManager.anArray count]==0) {     //Nothing exists, so just add it
        [dataManager.anArray addObject:fav];
    }else {
        for (int i=0; i<[dataManager.anArray count]; i++) {
            if (![[[dataManager.anArray objectAtIndex:i] objectForKey:@"id"] isEqualToNumber:[NSNumber numberWithInt:anObject.anId]]) {
                [dataManager.anArray addObject:fav];
            }       
        }
    }
    [fav release];
}

1 Ответ

6 голосов
/ 14 сентября 2010

Один из довольно простых способов выполнить такую ​​проверку - отфильтровать массив с помощью NSPredicate. Если совпадений нет, результатом фильтрации будет пустой массив. Так, например:

NSArray *objs = [dataManager anArray];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == %@", [NSNumber numberWithInt:i]];
NSArray *matchingObjs = [objs filteredArrayUsingPredicate:predicate];

if ([matchingObjs count] == 0)
{
    NSLog(@"No match");
}
...