2010-09-14 87 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"); 
} 
相關問題