0

我需要从我的 fetchedResultsController 编辑与我的主实体有关系的实体中的一行数据,在这种情况下,“theUser”是我的用户实体的一个实例。

我基本上需要编辑已经存在的 CannedMessage 行之一并保存它。如下所示,我可以很好地访问“消息”,但是一旦找到 CannedMessage,我就不确定如何将其保存回“theUser”的 managedObjectContext

有什么建议吗?

NSArray *msgs = [theUser.Messages allObjects];

NSPredicate *activeMatch = [NSPredicate predicateWithFormat:@"defaultMessage == 1"];
NSArray *matched = [msgs filteredArrayUsingPredicate:activeMatch];

CannedMessage *msgToEdit;

for(CannedMessage *msg in matched) {
    msgToEdit = msg;
}
4

1 回答 1

0

你的问题是你用 SQL 术语而不是 Core Data 的面向对象术语来思考。您要查找的数据不在 SQL 行中,而是在托管对象的属性中。在这种情况下(我假设),您正在寻找CannedMessage实例的属性。

matched数组将包含使用CannedMessage实体初始化的托管对象或专用 NSManagedObject 子类的实例(如果您设置了一个看起来像您所做的那样。)

假设属性名为theMsg。要访问通用托管对象中的属性:

for(CannedMessage *msg in matched) {
    msgToEdit = [msg valueForKey:@"theMsg"];
}

...访问自定义类:

for(CannedMessage *msg in matched) {
    msgToEdit = msg.theMsg;
}

在学习 Core Data 时,忘记所有关于 SQL 的知识是非常重要的。SQL 并没有真正转化为核心数据。Core Data 不是围绕 SQL 的面向对象的。实体不是表,关系不是链接表或连接,属性不是列,值不是行。相反,Core Data 创建对象就像您手动编写自定义类来模拟现实世界的对象、事件或条件一样。Core Data 几乎将 SQL 用作其众多持久性选项之一。

根据我的经验,你对 SQL 了解得越多,就越难转向 Core Data 和其他对象图 API。你想把新东西翻译成你已经掌握的东西。这是自然的,但要抵制冲动。

于 2010-09-04T17:22:02.660 回答