我試圖從不在給定集合中的核心數據中獲取對象,但是我一直無法讓它工作。從核心數據中獲取對象不在集合中
例如,假設我們有一個名爲User的核心數據實體,它具有幾個屬性,如userName,familyName,givenName和active。鑑於表示一組用戶名的字符串數組,我們可以很容易地獲取所有對應的用戶名是列表中的用戶:
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User"
inManagedObjectContext:moc];
[request setEntity:entity];
NSArray *userNames = [NSArray arrayWithObjects:@"user1", @"user2", @"user3", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName IN %@", userNames];
[request setPredicate:predicate];
NSArray *users = [moc executeFetchRequest:request error:nil];
不過,我想獲取該集合的補,即,我希望所有的核心數據中的用戶沒有在userNames數組中指定的用戶名。有沒有人有一個想法如何解決這個問題?我認爲在謂詞(i.e., "userName NOT IN %@")
中添加一個"NOT"
會很簡單,但是Xcode會拋出一個異常,說明不能分析謂詞格式。我也嘗試使用可用於提取請求的謂詞構建器,但沒有運氣。文檔也不是特別有用。建議?註釋?感謝您的幫助:)
夠簡單......謝謝,slev。 – tomas 2011-05-31 14:31:34
太棒了。我認爲這是行不通的。但是那是因爲我的數組中的數據來自另一個字段。謝謝。簡單而有效。 – 2013-01-01 03:42:01
注意:這不適用於NSNumber變量,這可能是有道理的,但如果您將一個枚舉包裝在NSNumber中,這是一種遺憾。在這種情況下,使用'[NSPredicate predicateWithFormat:@「NOT(enumWrapper IN {%d,%d})」,enum1,enum2]'。 – 2013-03-18 00:43:18