2013-05-20 240 views
1

我目前正在构建一个核心数据应用程序,我碰到了一个障碍。我想这里的架构上的一些上下文:核心数据混淆检索记录

该应用程序是跟踪治疗师与她的客户的会话。所以模式是这样组织的:有一张客户表,客户有会话,会话有活动,活动有指标。在应用程序中,这些指标转化为简单的计数器,计时器和NSSliders。

问题的关键在于客户希望能够将以前制定的活动插入到新客户的新会话中。所以,我试着只做一个简单的获取请求,然后转移到NSFetchedResultsController。我一直遇到这样的问题,即由于核心数据是一个对象图,我得到了大量实际上具有相同数据的活动条目。唯一的差异化财产将是无论会议是什么(如果你想更进一步,客户本身)。

我不确定这是我需要在模式本身中进行更改还是在Core Data中可以执行某种解决方法。我已经尝试通过使用结果类型NSDictionaryResultType来使用NSFetchedResultsController执行不同的读取结果。它完成我想要的东西,但我只获取实体的相关属性,而不是与它关联的任何子实体(我需要这些度量,你会看到)。

任何帮助表示赞赏,如果需要,我可以发布代码,即使我没有真正具体的编码错误。

回答

1

我没有看到问题。如果您使用Client,Session,ActivityMetric实体对事物进行建模,每个实体与其右侧的实体具有多对多关系,并与其左侧的实体具有一对多对立关系(顺序为I列出实体),没有什么能阻止你将一个特定的活动添加到另一个客户端的会话中,是吗?

也许我误解了这个问题。

+0

我的东西完全按照这种方式建模,我同意我不认为应该有什么阻止我。也许我的问题是“这是怎么回事”? NSFetchedResultsController给了我不同的结果。 – jason328

+0

@ jason328也许你需要编写代码才能获得所需的确切Activity对象。你可以使用'NSFetchRequest'和'NSPredicate'来实现,如下所述:http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/ doc/uid/TP40002484-SW1然后,您可以将该对象添加到所需的Session对象。 – 7cows

+0

@ 7cows3,谢谢! – jason328

1

只需使用一个简单的NSFetchRequest并设置您正在查找的谓词。如果您获得的结果太多,您可以设置获取限制,但是您的问题听起来不像IMO的问题。

我相信你正在寻找的是一个NSPredicate来缩小你的结果。一旦你获取一个特定的对象,你可以用点符号方便地为该对象分配任何关系或属性,然后保存上下文。