2010-09-14 31 views
3

的阵列中的标题是有点混乱存在......我会解释如何检查是否在一个NSDictionary的值dictionarys

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

实施例:

步骤1:A按钮被点击设置对象的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]; 
} 
+0

你想让你的代码在哪个版本的iOS上运行?如果你使用的是iOS 4.0以上的版本,那么这很容易。 – kubi 2010-09-14 15:02:28

+0

不需要特殊的“空”情况。而你的循环内逻辑是错误的。你首先需要检查它是否在*任何*中,并且在循环之后,如果需要的话添加。 – Eiko 2010-09-14 15:09:36

+0

这实际上是在iPad,iOS 3.2上运行。 – rson 2010-09-14 15:33:01

回答

6

一个相当简单的方法做这种检查是使用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"); 
} 
相关问题