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 你能解释一下吗? 不要使用objectIDWoods。使用Woods 本身。使用NSManagedObjectContextobjectWithID: 方法从其对象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的核心数线程数的关系和区别,同步与堵塞完全是两码事

1对1关系核心数据iOS

iOS核心数据:存储与不同实体中任何NSManagedObject的关系

CPU的核心数、线程数的关系和区别