2016-05-27 2 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 

私が期待するものの代わりに:

述語形式:NOT (type IN {"aaa", "bbb"})を使用すると同じ問題が発生します。これは私がこれを必要とする実際の方法です。この述部の結果、レコードが取得されません。

私は述部を指定しなければ、すべてのオブジェクトが正しくフェッチされるため、なぜこれが起こるのか分かりません。 NULLタイプを持つオブジェクトは、私は、述語を変更したい場合は、正しくフェッチ得るか:

[NSPredicate predicateWithFormat:@"type = null"]; 

に注意してください。上のすべては、問題がどのようなものであるかを示しています。私の実際のコードは、より複雑で、単純に述語フォーマットを使用しています。type != "aaa" OR type = nullは可能なら避けたいものです。

大変助かりました!

答えて

関連する問題