如何获取与其他不使用 id 字段相关的托管对象?

Posted

技术标签:

【中文标题】如何获取与其他不使用 id 字段相关的托管对象?【英文标题】:How to fetch a managed object related to other not using id fields? 【发布时间】: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 对象。我该怎么做? 附言她是数据模型:

【问题讨论】:

【参考方案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]);

【讨论】:

以上是关于如何获取与其他不使用 id 字段相关的托管对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中获取联系人的所有详细信息

Django - 如何为字段组合与查询集仅获取 2 个对象

一张表怎么与一张表的一个字段的关联获取它的id值

如何正确获取实体相关对象

CoreData如何实现托管对象的“计算”属性字段

在单个查询中从他们的 ID 获取相关数据的最佳方法是啥?