Objective-C的。 Coredata管理的上下文,用于在NSFetchedResultsController

时间:2018-03-23 13:30:32

标签: ios objective-c core-data nsmanagedobject nsmanagedobjectcontext

1)我有NSFetchedResultsController一些集合视图,我使用 defaultManagedObjectContext 来保留它的上下文,其中一个是NSMainQueueConcurrencyType并且它设置为{的子节点{1}}。

2)我在同一个 defaultManagedObjectContext 中取自CoreData的NSPrivateQueueConcurrencyType NSArray。我使用的这个字符串就像NSStrings,就像下面窗口中的过滤器选项一样。过滤器可以正常工作。

3)我有方法在另一个 backgroundManagedObjectContext predicate)中更改Collection View元素(例如,设置LIKE),它设置为 defaultManagedObjectContext的子元素。喜欢按钮按预期工作。

但是当我尝试一起使用(Predicate和Set like method)时,CoreData会出现错误:

  

ALL或ANY运算符的左侧必须是a   NSArray或NSSet。

我应该使用其他上下文来保持谓词吗?

作为 defaultManagedObjectContext 的孩子?

这样的谓词:

NSPrivateQueueConcurrencyType

因此,[NSEntityDescription entityForName:@"NMObject" inManagedObjectContext:self.managedObjectContext]; self.selectedTypes = [[NSArray alloc] initWithObjects:@"музей", nil]; _predicate = [NSPredicate predicateWithFormat:@"ANY types.typeObjValue IN %@", self.selectedTypes]; NMObject的关联NMTypeObj

1 个答案:

答案 0 :(得分:0)

谢谢大家!

问题在于谓词格式。如果关系是NMObject types <<--Many to One--> NMTypeObj objects,可能会使用ANY。例如,ANY的正确关系是NMObject types <--One to Many-->> NMTypeObj objects

所以,就我而言,我将谓词改为:

_predicate = [NSPredicate predicateWithFormat:@"types.typeObjValue IN %@", self.selectedTypes];