2016-05-27 57 views
0

我有一個看起來像這樣保存在我的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是我想盡可能避免的。

任何幫助非常感謝!

回答