我有一個看起來像這樣保存在我的CoreData對象:CoreData fetchRequest與謂語不正確跳過NULL值
idnametype 1 cat aaa 2 dog bbb 3 ape NULL
我獲取基於這樣的「類型」屬性中的對象:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:self.entityName];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"type != %@", @"aaa"];
fetchRequest.fetchBatchSize = 100;
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES]];
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"section" cacheName:nil];
fetchedResultsController.delegate = self;
NSError *error = nil;
[fetchedResultsController performFetch:&error];
所以,我只是試圖獲取所有類型不是「aaa」的對象。
該找取請求出乎意料省略不僅對象與作爲謂詞指定「AAA」的類型,但也其中類型沒有被設置(空)的對象,從而產生以下:
idnametype 2 bar bbb
而不是我所期望的:
idnametype 2 dog bbb 3 ape NULL
當我使用謂詞格式時會發生同樣的問題:NOT (type IN {"aaa", "bbb"})
。這是我需要的實際方式。這個謂詞導致沒有記錄被抓取。
我不明白爲什麼會發生這種情況,因爲如果我沒有指定謂詞,所有對象都會被正確提取。用NULL類型的對象都得到正確牽強,如果我會改變謂詞:
[NSPredicate predicateWithFormat:@"type = null"];
請注意;以上所有內容都說明了問題歸結爲什麼。我的實際代碼更復雜,只需使用謂詞格式:type != "aaa" OR type = null
是我想盡可能避免的。
任何幫助非常感謝!
確實,謝謝你。所以我猜想沒有辦法在謂詞中添加空測試。 – Tonnie