【问题标题】:Syncing Core Data With AddressBook将核心数据与地址簿同步
【发布时间】:2014-07-16 08:44:46
【问题描述】:

清除核心数据文件中的所有数据并将更新后的地址簿重写为核心数据的最佳方法是什么?有没有办法覆盖核心数据中的数据?我怎样才能在一个好的实践中做到这一点?

我希望能够同步我的地址簿和我的核心数据文件,其中一种方法是检查地址簿中的更改,并根据该更改在我的核心数据中删除或添加记录(我不'不关心已编辑的记录),一种方法是使用核心数据删除我的 SQLite 文件中的所有数据,然后将我更新的地址簿再次保存到同一个文件中。

【问题讨论】:

    标签: ios objective-c core-data addressbook


    【解决方案1】:

    请参阅 this blog post from Brent Simmonsmy comment on my answer to your previous question

    从 Core Data 存储中删除一堆对象是昂贵的。您必须获取并实例化每个 NSManagedObject,然后将其删除,然后将更改推送到您的核心数据堆栈。这个过程比简单的 SQL DELETE 花费的时间要长得多。

    如果您在 Core Data 存储中还有其他必须保留的数据,那么您将陷入困境。你必须这样做。但是,如果您可以清除数据存储并重新开始,那将会快得多。使用当前通讯簿数据创建一个新的核心数据存储。保存。关闭现有数据存储。将新数据存储移动到旧数据存储的位置(或将文件路径更改为新存储的路径)。

    iOS 8 中的批量更新功能可能会加快这一过程。

    【讨论】:

    • 这很令人沮丧,因为地址簿没有告诉它发生了什么样的变化,而且我不能轻易覆盖我的核心数据文件。所以我将不得不手动搜索我的地址簿中添加/删除的行并将其与我的核心数据文件进行比较,并根据地址簿中的更改进行添加/删除。那是最好的方法吗?注意:我的核心数据文件仅包含我所有的通讯录联系人 ID 和一个布尔属性。以后可能会扩展,但现在就是这样。
    • 我认为总的来说,这是最好的方法。在后台线程(或 -performBlock)中执行此操作以最大程度地减少任何 UI 阻塞。使用修改日期!还要记住,最好在 Core Data 之外进行唯一化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2012-08-11
    • 2012-04-16
    相关资源
    最近更新 更多