使用第三方对象作为核心数据实体

时间:2014-01-17 05:37:46

标签: objective-c core-data

我想使用他们的iOS SDK从Evernote服务中下载并缓存笔记,笔记本和标签。他们的SDK带有一个Store,它返回一个模型对象数组,匹配我设置的过滤条件。

我想采用这些模型并将它们用作核心数据中的实体。我明白我不能,因为他们从NSObject继承。所以我向大家提出的问题是,当我基于Evernote模型对象对我的实体进行建模时,我可以采用哪些最佳实践?这真是一种痛苦,因为每次他们改变某些东西时,我都必须在我的实体中反映出相同的变化。有没有工作,或者我被困在建桥梁(可以这么说)?。

谢谢, 乔纳森

2 个答案:

答案 0 :(得分:2)

关注我的评论

  

我在这里不明白你的问题。刚开始数据导入   每次从Evernote返回模型。每个模型都应该是   通过核心数据实体设计。

你回复了。

  

抱歉,我不确定您的导入是什么意思。放下物品   从Evernote然后手动将其对象属性分配给我的   实体?这将是一个痛苦,但是一个选择。如果有很多话   要复制的属性。

使用导入我的意思是你应该为从Evernote收到的结果中返回的每个模型插入一个托管对象。

这意味着如果Evernote返回包含三个属性的模型,那么你应该创建一个看起来相同的Entity(或类似的,因为它严格依赖于你的UI)。

这里我假设您的Core Data存储是一个缓存。所以你应该应用同步的东西。应根据用户插入,更新或删除项目。同步并不容易实现,但我可以为您推荐以下教程。

在这种情况下,您也可以利用RestKit,因为它提供了与Core Data的集成。特别是,它允许以简单的方式将NSObject s(例如从JSON调用返回)映射到Core Data实体。可以在NSScrencast GitHub Repository找到一个示例。请注意,我不知道Evernote SDK是如何工作的。所以,这种方法没有用处。

但是如果你是RestKit和Core Data的新手,我真的建议坚持使用普通的核心数据。它已经很难了。

如果您需要别的东西,请告诉我。

更新1

  

我肯定会做同步,所以我想我有   使用托管对象完全映射Evernote对象。自从   Evernote对象可以包含代表视频,图片的数据blob,   文件等,我将需要看看如何将这些数据存储在Core Data中   同样。

在核心数据中,您需要(这不是必须,但我非常好的建议)将文件(例如图像)存储在文件系统中。在实体中,您应该仅维护图像的元信息(即路径),并通过它稍后检索图像。这对于小数据来说不是必需的,但我认为你的二进制文件会很大。

从iOS 5开始,有一个名为外部存储的新标志,可以根据启发式算法为您执行此操作。

  

如果指定托管对象属性的值可能是   作为外部记录存储,Core Data启发式决定a   每个值的基础是否应该直接保存数据   数据库或将URI存储到它为您管理的单独文件中。

关于搜索二进制文件我真的建议使用一个名为tag的属性。这将允许您搜索图像,视频等。显然,当您保存时,您需要将该标记与指定的二进制数据相关联。这只是一个想法。

P.S。如果您需要进一步的支持我真的建议在SO上打开一个新问题。这有一个独立的问题。

答案 1 :(得分:-1)

您可能希望将对象保存为NSData。由于我不知道你想要使用什么对象,我无法确定它是否适合这个。要查看是否存在,您必须检查该类是否采用NSCoding协议。

有关归档的更多信息可以在Apple的文档中找到:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Archiving/Archiving.html