我有两个实体:Woods和Tree
Woods和Tree有关系,因为一个Woods可以有很多棵树。好吧,很简单。
在我的应用程序中,我知道一个树林的id(自动id: NSManagedObjectID),我想知道有多少棵树有我的树林。
我的代码是:NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Tree"];
[req setPredicate:[NSPredicate predicateWithFormat:@"wood.self == %@", [self app].current_wood_id]];
[req setResultType:NSCountResultType];
NSUInteger total = [context countForFetchRequest:req error:&error];
NSLog(@"total:%d", (int)total);
但是它不工作,为什么?
您应该停止在id中思考,而是接受对象图。您用来标识对象的id不是用于此目的的(而是用于跨线程标识对象)。
谓词中的关系就像属性一样:
[NSPredicate predicateWithFormat:@"wood = %@", aWoodInstance];
在您特定的情况下,您不需要fetch请求。就写:
wood.trees.count
再容易不过了!看到对象图有多强大了吧?