2013-03-06 130 views
0

我有核心數據實體字段的屬性爲ID。我想搜索所有現場實體ID == 1,2,或3NSPredicate與NSArray的NSNumbers(核心數據)

我如何添加一個數組到NSPredicate瓦特/創建一個長串附加類似:

NSArray *IDArray = @[@1, @2, @3]; 

NSMutableString *predicateString = [NSMutableString string]; 

for (NSNumber *ID in IDArray) { 
    [predicateString appendString:[NSString stringWithFormat:@"ID == %@, ID]]; 
} 
+0

就像一個音符 - 正常的Objective-C約定會有實例和局部變量以小寫字母開頭。這使得您的代碼片段更易於爲其他人閱讀。 – Monolo 2013-03-06 18:14:11

+0

xCode將假設'id'是一個類的類型。我一直認爲縮寫應該大寫?我猜IDArray對我有意義。我是否應該重命名,以便名稱不以大寫的縮寫(例如'arrayOfIDs')開頭? – Padin215 2013-03-06 18:22:22

+0

我相信這是個人品味的問題。我承認將它輸出爲'ident'或'identifier',使編譯器感到高興。 – Monolo 2013-03-06 18:54:39

回答

2

這應工作:

NSArray *IDArray = @[@1, @2, @3]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID IN %@", IDArray]; 

注:你不應該使用字符串格式化函數謂詞結合起來。使用

[NSCompoundPredicate orPredicateWithSubpredicates:...] 

和類似的方法。原因是字符串和謂詞有不同的規則如何擴展格式說明符。

+0

好吧,我看到這用於字符串,我不知道它是否也適用於NSNumbers,謝謝! – Padin215 2013-03-06 18:23:11

+0

@ Log139:即使該屬性具有Integer類型,並且該數組包含字符串,它仍然有效:該類型根據需要進行轉換。 - 如果有幫助,請考慮「接受」答案,謝謝。 – 2013-03-06 18:30:19

+0

我第一次試圖接受,告訴我等30秒,所以開始編碼,忘了回來接受= D – Padin215 2013-03-06 18:57:45