首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSFetchedResultsController没有看到由扩展制造的插入

NSFetchedResultsController没有看到由扩展制造的插入
EN

Stack Overflow用户
提问于 2020-06-27 21:24:28
回答 2查看 165关注 0票数 0

我有一个像这样构造的iOS应用程序

  • 主应用程序(主iOS应用程序)
  • 意图扩展 (Siri集成)
  • 共享框架(用于与核心数据交互的共享库)。这使得主应用程序和意图扩展都可以使用相同的Core数据存储)

我的问题是,当我使用意图扩展将某些内容插入核心数据时,在手动刷新fetchedResultsController之前,它不会出现在主应用程序的UITableView中:

代码语言:javascript
复制
NSFetchedResultsController<NSFetchRequestResult>.deleteCache(withName: "myCache")
try? fetchedResultsController.performFetch()
tableView.reloadData()

是否有一种方法可以让fetchedResultsController看到更改而不必手动刷新所有内容?

注意:如果我在主应用程序的核心数据中插入某些内容,fetchedResultsController会自动看到更改并更新表(与预期的一样)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-05 16:44:02

要在应用程序和扩展之间共享数据库,需要实现持久历史跟踪。有关介绍,请参见20:49的WWDC 2017核心数据中的新内容,而示例代码请参见文档消费相关商店的变更

基本思想是启用存储选项NSPersistentHistoryTrackingKey,观察NSPersistentStoreRemoteChangeNotification,在收到通知后,您应该使用NSPersistentHistoryChangeRequest获取更改,然后使用mergeChangesFromContextDidSaveNotificationtransaction.objectIDNotification合并到上下文中。然后您的NSFetchedResultsController将相应地更新。

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 16:12:49

这是正常的,因为应用程序扩展和主应用程序不是在同一个进程中工作。

在主应用程序中有一些更新数据的方法。

  • NSPersistentStoreRemoteChangeNotification
  • UserDefaults(适当名称:)
  • 达尔文通知

我使用UserDefaults和refreshAllObjects函数作为viewContext。

示例:

代码语言:javascript
复制
func sceneDidBecomeActive(_ scene: UIScene) {
    let defaults = UserDefaults(suiteName:"your app group name")

    let hasChange = defaults?.bool(forKey: "changes")
    if hasChange ?? false {
        refreshAllObjects()
        defaults?.set(false, forKey: "changes")
    }
    
}

刷新所有对象函数如下:

代码语言:javascript
复制
   viewContext.perform {
        viewContext.stalenessInterval = 0.0
        viewContext.refreshAllObjects()
        viewContext.stalenessInterval = -1
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62615712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档