【问题标题】:Core Data get back subclassed NSManagedObject from its objectIDCore Data 从其 objectID 中取回子类 NSManagedObject
【发布时间】:2012-11-11 06:52:24
【问题描述】:

我有 3 个使用 MOGenerator 生成的实体,我希望能够从他们的 objectID 中取回其中一个

我试过这个:

- (void)aMethod: (SpecialEntity1ID *)entityID
{
    //This is a method from MagicalRecord but it doesn't matter(I think...).
    NSManagedObjectContext *context = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];

    SpecialEntity1 *entity1 = [context objectRegisteredForID:entityID]
    //But this returns an NSManagedObject so it doesn't work...
}

有人可以帮我找回这个对象的 ID 吗?

由于我不知道如何使用 ID 来解决此问题,因此我通过创建一个以 NSString 作为参数而不是 SecialEntity1ID 的方法来解决此问题,该方法定义了此对象的一个​​属性(并且是唯一的)并获取对象。

我认为找回他的 ID 更好,所以有什么想法吗?

【问题讨论】:

  • 为什么要取回子类对象?你想创建一个对象的新实体吗?还是检索核心数据中的特定对象?
  • 我想取回它,因为我想在另一个线程上用它做点什么。而且由于在文档和其他地方都说 ManagedObject 不是线程安全的,所以我们必须使用它们的 ID,所以这就是为什么我试图从它的 ID 中取回它
  • stackoverflow.com/questions/5035057/…这对你有帮助吗?
  • 我真的没有看到这个问题,但是在这个问题中他使用的是 NSManagedObject 而不是子类,也许它应该对我有帮助,但我看不到,你能告诉我路径吗:p?跨度>
  • 好吧,看起来你已经得到了答案.. :) 答案看起来也和上面的链接一样。只是您需要进行类型转换。

标签: iphone objective-c ios core-data


【解决方案1】:

如果你 100% 确定返回类型,你想使用你的 NSManagedObjectContext 的existingObjectWithID:error: 方法和类型转换返回类型。我会保持它的通用性,即让它返回一个 NSManagedObject,然后在其他地方测试它的类,如果你想确定它是否属于某个特定的类。

- (Object*)retrieveObjectWithID:(ObjectID*)theID
{
    NSError *error = nil;
    Object *theObject = (Object*)[[NSManagedObjectContext contextForCurrentThread] existingObjectWithID:theID error:&error];
    if (error)
        NSLog (@"Error retrieving object with ID %@: %@", theID, error);
    return theObject;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2014-12-23
    • 2011-02-18
    • 2016-02-11
    相关资源
    最近更新 更多