2013-07-05 202 views
1

我有一個包含NSDictionaries的NSMutableArray * dataArray。如果searchString匹配其中一個字典值,我想遍歷數組以創建一個新的NSMutableArray * tempDataArray與來自第一個數組的對象。遍歷數組比較字典值

這裏是我的代碼:

self.tempDataArray = [[NSMutableArray alloc] init]; 

for (int i = 0; i < kDelegate.dataArray.count; i++) { 

    NSDictionary *dict = [kDelegate.dataArray objectAtIndex:i]; 

    for (int j = 0; j < [dict allValues].count ; j++) { 

     if ([[[[dict allValues] objectAtIndex:j]stringValue] isEqualToString:searchString]) { 

      [self.tempDataArray addObject:dict]; 
     } 
    } 

} 

現在,這並不工作,因爲字典中還含有的NSDate。至少,這就是我從錯誤信息閱讀:

-[__NSTaggedDate stringValue]: unrecognized selector sent to instance 0x41b7809e2600000d 

這一點我不明白,因爲我不聲明所有值stringValue的。

這是我的問題的第一部分。第二部分是,它只搜索完全匹配,但我寧願有一個搜索來確定字典值是否包含子字符串。

無論如何,感謝您的幫助!

+0

你是什麼意思的 「聲明所有的值作爲stringValue的」 嗎?這沒有意義......另外,請閱讀異常消息。它告訴你,你正在試圖將'stringValue'消息發送給一個'NSDate',當然它沒有實現。 – 2013-07-05 14:46:59

+0

我的意思是這樣一行:'[[[所有值] objectAtIndex:j] stringValue]' 不應該照顧日期並將其轉換爲字符串值嗎? – freshking

回答

1

(未經測試):

self.tempDataArray = [[NSMutableArray alloc] init]; 

for (NSUInteger i = 0; i < kDelegate.dataArray.count; i++) { 

    NSDictionary *dict = [kDelegate.dataArray objectAtIndex:i]; 
    NSArray *allValues = [dict allValues]; 

    for (NSUInteger j = 0; j < allValues.count; j++) { 
     NSObject *obj = [allValues objectAtIndex:j]; 
     if ([obj isKindOfClass:[NSString class]]) { 
      NSRange range = [(NSString *)obj rangeOfString:searchString]; 
      if (range.location != NSNotFound) { 
       [self.tempDataArray addObject:dict]; 
      } 
     } 
    } 
} 
+0

這很好用,非常感謝!簡單的複製和粘貼。 – freshking

+0

@自動化不客氣。 – trojanfoe