如何获取与其他不使用 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】:您可以通过从UserPicture
到User
的关系来获取:
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 字段相关的托管对象?的主要内容,如果未能解决你的问题,请参考以下文章