【问题标题】:iOS: core data, number of relationship with Auto IDiOS:核心数据,与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/… 遵循约定可以让其他人更轻松地帮助您解决问题。

标签: ios core-data nspredicate nsfetchrequest


【解决方案1】:

您应该停止思考 ID,而应该拥抱对象图。您用来识别对象的 ID 不是用于此目的(而是用于跨线程识别对象)。

谓词中的关系就像属性一样写:

[NSPredicate predicateWithFormat:@"wood = %@", aWoodInstance];

在您的特定情况下,您不需要获取请求。随便写:

wood.trees.count

再简单不过了!看看对象图有多强大?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多