神奇的记录1对多的关系目标c

Posted

技术标签:

【中文标题】神奇的记录1对多的关系目标c【英文标题】:Magical record 1 to many relationships objective c 【发布时间】:2013-06-21 14:31:33 【问题描述】:

我将Magical Record 用于Xcode 数据库。 我有两个实体,一个名为“任务”,另一个名为“评论”,我想建立一个关系,以便在我查询任务时一个任务有一个 cmets 数组,有可能吗,我是魔法新手记录一下,希望我能理解这个问题。谢谢。

编辑: 嘿,感谢您的帮助,我使用此代码将 cmets 放入任务中:

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_defaultContext];  
     TarefaMR *task = [TarefaMR MR_createInContext:localContext]; task. 

//...

for (NSDictionary *comment in [tarefa objectForKey:@"comments"])     NSManagedObjectContext *localContext3 = [NSManagedObjectContext MR_defaultContext];
           ComentarioMR *comment = [ComentarioMR MR_createInContext:localContext3];
       [localContext3 MR_saveToPersistentStoreAndWait];
            [task addComentariosObject:comment];  

[localContext MR_saveToPersistentStoreAndWait];

但现在我尝试访问它,但我似乎无法从任务中的 cmets 获取数据,

我使用的代码:

for (TarefaMR *tarefa in [TarefaMR MR_findAll];)     
NSLog(@"tarefa.comentarios %@",tarefa.comentarios);      

我得到一个

tarefa.commentarios 托管对象上的关系 'commentarios' 错误 : 评论 = ;

我已经尝试在 for 中循环 tarefa.comentarios,但似乎没有得到任何东西,如果我查询 cmets 数据库,对象就在那里。

然后我尝试使用:

for (ComentarioMR *comment in tarefa.comentarios)  
    NSLog(@"comment listHeader %@", comment.listHeader);
    NSLog(@"comment listText %@", comment.listText); 

如何获得任务的 cmets?

【问题讨论】:

【参考方案1】:

MagicalRecord 只是核心数据的一个包装器。您可以使用 Xcode 中的核心数据模型编辑器定义实体及其关系。您可以通过单击 Xcode 中名为 [您的项目名称].xcdatamodeld 的文件来访问此工具。如果你没有这样的文件,你需要先创建一个。

在这个可视化编辑器中,您可以创建实体并向它们添加属性和关系。然后,您可以选择其中一个关系,转到 Xcode 中的检查器,其图标由一个小数据库表示的部分,然后勾选“To-Many Relationship”框。

如果您不知道 Core Data 的工作原理,我强烈建议您阅读 Core Data Programming Guide 或至少找到一些解释其工作原理的教程。

【讨论】:

还有一点:关系默认返回 NSSet。如果您选择“有序”选项,您将获得一个 NSOrderedSet。绝不是 NSArray。 thks,现在我有一个带有 nset cmets 的任务实体,现在我正在寻找如何创建 cmets,然后将 cmets 添加到任务中,已经有了这个代码:NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; TarefaMR *task = [TarefaMR MR_createInContext:localContext]; task.nome=@"sdf" task.commentarios= [localContext MR_saveNestedContexts]; 你不需要那个。如果您在主线程上添加 cmets,只需使用 [NSManagedObjectContext MR_defaultContext],否则使用 [NSManagedObjectContext MR_context]。假设您将这两个中的一个存储在一个名为“上下文”的变量中。你可以这样做:Task *task = [Task MR_createInContext:context]; ... setup the task Comment *comment = [Comment MR_createInContext:context]; ... set attributes to the comment comment.task = task.

以上是关于神奇的记录1对多的关系目标c的主要内容,如果未能解决你的问题,请参考以下文章

关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句

一对多的神奇记录

选择多对多关系的最新记录

教义 - 在多对多关系表中插入记录

神奇的记录删除所有孩子的一对多关系

mysql多对多