【问题标题】:Chat, conversation, messaging - CoreData model聊天、对话、消息传递 - CoreData 模型
【发布时间】:2014-03-20 18:27:51
【问题描述】:

在将问题标记为与this question 重复之前,请阅读说明。我不需要在评论中继续讨论。

所以我想为消息传递应用程序创建CoreData 模型。就像在这个主题中所说的那样,我是否提到过 - 我有三个实体:

  1. User 实体定义消息的作者和对话的参与者。
  2. Message 实体定义了使用应用发送的每个文本。
  3. Conversation 实体使用消息定义用户之间的对话。

好的,所以我的数据模型是这样的:

但这里的一切都是相互联系的。提到的答案和我的解决方案之间的唯一区别是 UserMessage 使用一对多关系连接。我想我需要那个,因为没有它就不可能知道谁在对话中写了什么。

但据我所知,当一切都相互连接时,数据模型毫无意义。

所以这里的关键目标是:

  1. 在对话屏幕我想知道谁写了什么
  2. 在一个对话中至少可以有两个用户参与
  3. 消息为纯文本
  4. 用户必须能够列出他的所有对话。

就是这样。

请验证当前的解决方案并随时批评。

【问题讨论】:

  • 考虑为作者使用 fetchedProperty 或包含 objectID 的普通属性,从而使作者关系变得不必要。参与者也可以这样做。

标签: ios objective-c core-data data-modeling


【解决方案1】:

据我所知,UserConversation 之间没有真正需要多对多关系。

如果用户想要获取其所有对话,他可以使用此获取请求:

User* user = //get some user you like conversations for
NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Conversation"];
r.predicate = [NSPredicate predicateWithFormat:@"ANY messages.author = %@",user];

以同样的方式,您可以获得给定对话的所有用户。

您可以将其建模为每个实体(UserConversation)上的获取属性。

您真的应该考虑将chat 关系更改为messages

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多