iOS:核心数据,与Auto ID的关系数
Posted
技术标签:
【中文标题】iOS:核心数据,与Auto ID的关系数【英文标题】:iOS: core data, number of relationship with Auto ID 【发布时间】:2014-07-18 14:35:07 【问题描述】:我有两个实体:树林和树
Woods 与 Tree 有关系,因为一个树林可以有很多树。 好的,这很容易。
在我的应用程序中,我知道一棵树林的 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,在谓词中使用对象本身。 mmmm 你能解释一下吗? 不要使用objectID
的Woods
。使用Woods
本身。使用NSManagedObjectContext
的objectWithID:
方法从其对象ID 实例化Woods
。
确定之后?获取我的树林的树数的谓词形式是什么?
[NSPredicate predicateWithFormat:@"wood == %@", [self app].current_wood]
。作为旁注,您在命名变量和方法时没有遵循正确的约定。我建议阅读此developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 遵循约定可以让其他人更轻松地帮助您解决问题。
【参考方案1】:
您应该停止思考 ID,而应该拥抱对象图。您用来识别对象的 ID 不是用于此目的(而是用于跨线程识别对象)。
谓词中的关系就像属性一样写:
[NSPredicate predicateWithFormat:@"wood = %@", aWoodInstance];
在您的特定情况下,您不需要获取请求。随便写:
wood.trees.count
再简单不过了!看看对象图有多强大?
【讨论】:
以上是关于iOS:核心数据,与Auto ID的关系数的主要内容,如果未能解决你的问题,请参考以下文章
具有核心数据关系的 iOS 8 Swift NSFetchResult 谓词无法访问内部 ID
线程池大小设置,CPU的核心数线程数的关系和区别,同步与堵塞完全是两码事
线程池大小设置,CPU的核心数线程数的关系和区别,同步与堵塞完全是两码事