4

标题有点混乱......我会解释

我有一个NSMutableArray我正在填充NSMutableDictionary对象。我要做的是在将字典对象添加到数组之前,我需要检查是否有任何字典包含等于已设置的 id 的值。

例子:

第 1 步:单击一个按钮,设置对象的 id 以用于建立视图。

第 2 步:在所述视图中按下另一个按钮以将其一些内容保存到字典中,然后将所述字典添加到数组中。但是,如果已建立的 ID 已作为字典键之一的值存在,则不要插入此字典。

这是我目前无法使用的一些代码:

-(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];
}
4

1 回答 1

7

进行这种检查的一种相当简单的方法是使用 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");
}
于 2010-09-14T15:45:50.520 回答