【问题标题】:How to fetch a managed object related to other not using id fields?如何获取与其他不使用 id 字段相关的托管对象?
【发布时间】:2014-01-13 21:56:09
【问题描述】:

我在核心数据模型中有两个实体:User 具有属性名称、姓氏、年龄等,UserPicture 具有属性图片名称、二进制数据、扩展名。我在 User 和 UserPicture 实体之间也有picture 的关系。我想选择带有NSFetchRequest 的UserPicture,它连接到我之前获取的特定用户对象。我不想为 User 对象创建 id 字段的问题。所以我不能这样写NSPredicate"User.id == %@"。我可以使用 Usermanaged object id 以某种方式获取 UserPicture 对象吗?底层的核心数据分配给每个保存的对象?还是仅通过关系名称获取?在理想情况下,我想要这个:我从商店 sme time 获取User 对象,然后我想获取连接到这个获取的用户对象的 UserPicture 对象。我该怎么做? 附言她是数据模型:

【问题讨论】:

    标签: ios objective-c cocoa-touch core-data ios7


    【解决方案1】:

    您可以通过从UserPictureUser 的关系来获取:

    User *theUser = ...; // your User object
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user == %@", theUser];
    

    这假定“用户”是一对一的关系。 对于一对多的关系,你会这样做

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY user == %@", theUser];
    

    【讨论】:

    • “用户 == %@”。你能告诉为什么用户是小案例吗?我在核心数据中的实体被称为用户。
    • @Harry:你必须使用从 UserPicture 到 User 的 relationship。关系通常使用小写字符。
    • 我试过了,但是获取请求什么也没获取,但是我在数据库中有一个用户图片。在调试控制台中生成的 SQL 语句是:SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATA, t0.ZEXTENSION, t0.ZNAME, t0.ZPICTURE FROM ZUSERPICTURE t0 WHERE t0.ZPICTURE = ? ORDER BY t0.ZNAME DESC
    • 顺便说一下图片关系是反的
    • @Harry:您似乎使用了从 User 到 UserPicture 的关系。从 UserPicture 到 User 应该存在反比关系。 (也许您可以将您的核心数据模型的屏幕截图添加到问题中。)
    【解决方案2】:

    如果您已经获取了用户对象,那么只需使用user.picture 来访问图片对象。或user.picture.pictureName 访问属性。

    要在 Core Data 中创建图片,您必须使用

    UserPicture *userPicture = = [NSEntityDescription insertNewObjectForEntityForName:@"UserPicture" inManagedObjectContext: managedObjectContext];
    userPicture.pictureName = @"picture name";
    

    要在创建用户图片后设置用户图片,请使用

    user.picture = userPicture;
    

    要保存您创建的任何内容,请使用

    NSError *error = nil;
    if (![managedObjectcontext save:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2017-10-29
      • 1970-01-01
      • 2019-02-09
      • 2017-04-03
      • 2013-10-02
      相关资源
      最近更新 更多