简单核心数据查询

时间:2015-08-05 20:55:14

标签: ios core-data database-design

我正在为iOS设计一个聊天应用程序,我已经构建了该模型(任何反馈都会受到赞赏......),但是我不确定它是否符合目的

enter image description here

根据上述模型,当我创建新会话时,发件人和收件人将被添加到参与者集中。

现在当我来构建我的主表视图时,我想只显示接收者参与者(完全像iMessage那样 - 见下图),但不能考虑如何只提取接收者。

enter image description here

我确实考虑过向"添加" "来自"在对话实体中,但感觉有点笨重?虽然让参与者感觉更清洁,但我仍然无法提出一个简单的解决方案。

我最初的想法是获得所有对话并排除mainUser(谁将成为发件人)

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Conversation"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY participants.mainUser == nil"]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:NO];

但这并不奏效,因为我要求包含两位参与者的对话。

这里可能存在设计问题。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我徒劳地试图解决这个问题。在浪费了大量时间发现无法使用任何类型的CoreData查询之后,我最终创建了一个仅用于邮件头的表。所以你可能想考虑尝试这样的事情:

Table: MessageHeader
Attributes:  
latestMessageTimeStamp  
Relationships:  
Message   
User  

MessageHeader为当前用户从其收到消息或向其发送消息的每个用户包含一行。所以你基本上在MessageHeader中为当前用户所对应的每个联系人维护一行。每当从该联系人接收或发送消息时,都会更新属性latestMessageTimeStamp。此外,如果删除邮件,则需要更新该时间戳,如果删除给定联系人的最后一条唯一邮件,则需要删除整行。