无法理解何时在 Coredata 中使用 int 或 string



iOS 10, Swift3

我正在制作一个应用程序,用户可以从服务器获取他们的日常议程,我想将他们的日程安排保存在 Coredata 中。来自 API 的简单 json 如下所示

{
"id": 11639002,
"subject": "Coffeee",
"startUTC": "2017-05-03T15:00:00+00:00",
"endUTC": "2017-05-03T16:00:00+00:00"
}

如果在服务器端进行更改,我也想更新约会,我也不想保存重复的条目。我还希望能够按startDate对这一行进行排序,我想按其id传递此约会行

我认为一个好的解决方案是这样的

@NSManaged public var id: Int32
@NSManaged public var subject: String?
@NSManaged public var startUTC: NSDate?
@NSManaged public var endUTC: NSDate?

我在这里读到的每一篇文章都说 Coredata 不是 ORM 或关系数据库 ,所以开发人员应该摆脱这种心态。

我不明白当我尝试像在服务器端一样复制unique_id方法时,我如何以及为什么需要摆脱关系数据库的心态。

本教程 http://dorianroy.com/blog/2015/09/how-to-implement-unique-constraints-in-core-data-with-ios-9/

不再有获取/如果/否则

到目前为止,当您想将数据对象从 对于文件或网络请求,您必须为每个请求创建一个提取请求 具有与 id 匹配的谓词的传入对象,然后执行 它来查找该对象的现有版本。如果你找到了一个, 您将更新它,否则创建一个新对象。具有独特的 约束,您不必再执行此获取/if/else并保存 解析数据时有大量数据库请求。

Unique Constraints must be strings

所以我想做的就是不要有重复的行,而是按它的 id 更新行。

我应该使用什么方法?我是否必须像那篇博客文章中那样制作id字符串,或者旧的常规 32 位整数方法也可以工作?

底线是你应该编写你理解的代码,并以其他人第一次看到它的方式理解。 的确,核心数据不是一个关系数据库,但它是一个环绕关系数据库的包装器。因此,如果你可以使用这种范式解决你的问题,它既简单又易于理解,我说去吧。 准备好在以后的某个地方重新审视您的实现。但到那时你会更好地了解你的问题。

相关内容

最新更新