MagicalRecord:一对多关系

时间:2015-04-09 09:18:50

标签: ios objective-c magicalrecord

我不太确定这是否是正确的方法

我希望实体A和B之间有一对多的关系,所以A可以引用B的多个记录,但B只能引用A的一个记录

我的问题是如何使用MagicalRecords执行此操作...我熟悉基本读取和创建单个实体

但不知道如何获取,创建,更新具有真实性的实体

2 个答案:

答案 0 :(得分:0)

“MagicalRecords如何做到这一点”是什么意思?因为MagicalRecords无法处理。 它们都在coredata模型文件中设置。 例如,对于我的项目,我正在实现IM功能。  1.一次谈话 - >很多消息  2.一条消息 - >一个对话

enter image description here

enter image description here

这是数据模型的设计。 随时问我关于Coredata + MR的任何问题 干杯!

答案 1 :(得分:0)

首先,您需要注意'背景' CoreData。我通常使用[MagicalRecord saveWithBlock:^(NSManagedObjectContext * localContext){}];方法,并在块内创建实体。

我将使用我的案例,我将上面作为一个例子,

保存"消息"谈话"谈话"实体,

ChatConversation* chatConversation = [ChatConversation MR_findFirstByAttribute:@"conversationID" withValue:<your value> inContext:localContext];

^首先看看是否已经使用find first by attribute方法

创建了一个实体
ChatMessage* chatMessage = [ChatMessage MR_createInContext:localContext];
   [chatMessage set.....];
   ......

if(!chatConversation){
   //You need to create a new chatConversation entity
   chatConversation = [ChatConversation MR_createInContext:localContext];
   ......
 }
   [chatMessage setChatConversation:chatConversation];
  1. 如果您想从聊天对话中获取所有消息,只需使用自定义谓词fetchAll消息

    -(NSFetchedResultsController *)fetchedResultsController {
    
     if(!_fetchedResultsController)
         _fetchedResultsController = [ChatMessage MR_fetchAllSortedBy:@"createdAt" ascending:TRUE withPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @"conversation.conversationID",self.conversationObject.conversationID] groupBy:nil delegate:self];
    
    return _fetchedResultsController;
    }