2
首先:對不起,如果標題不是很清楚,我不能將我的問題轉化爲簡短的單詞!NSFetchRequest中的多個匹配的NSPredicate
請考慮以下情形:
- 你正在使用的核心數據存儲對象
- 你想從您的上下文
取對象 - 你想包括一個謂語只能使用特定的性質
獲取對象 - 您有一個包含鍵值對的NSDictionary,其中鍵代表屬性名稱,並且該值表示期望的值以匹配
如何才能最好地實現此目的?
目前我有以下,這是實現這一目標的快速和可能低效的方式:
NSDictionary *attributes = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects:@"value1", @"value2", nil] forKeys: [NSArray arrayWithObjects:@"attr1", @"attr2", nil] ];
// Build predicate format
NSString *predicate = @"";
NSMutableArray *predicateArguments = [[NSMutableArray alloc] init];
int index = 0;
for (NSString *key in attributes) {
NSString *value = [attributes objectForKey: key];
predicate = [predicate stringByAppendingFormat: @"(%@ = %@) %@", key, @"%@", index == [attributes count]-1 ? @"" : @"AND "];
[predicateArguments addObject: value];
index++;
}
NSPredicate *matchAttributes = [NSPredicate predicateWithFormat:predicate argumentArray:predicateArguments];
-
是否有實現這一謂語較短或更有效的方式?
請注意,塊謂詞是不是一種選擇,由於無法與NSFetchRequest(核心數據)載
你能做出這樣使用塊計數'[attributes enumerateKeysAndObjectsUsingBlock:^(id key,id value,BOOL * stop),稍微(1行)更短且最可能更高效{subPredicates addObject:[NSPredicate predicateWithFormat:@「%K =%@」,核心價值]]; }];' –
@ Paul.s:好主意! –
感謝解決方案的人,非常有幫助。我將Paul.s評論複製到未來觀衆的答案中,以防他們錯過評論! – Joshua