我有一个像这样构造的iOS应用程序
我的问题是,当我使用意图扩展将某些内容插入核心数据时,在手动刷新fetchedResultsController之前,它不会出现在主应用程序的UITableView中:
NSFetchedResultsController<NSFetchRequestResult>.deleteCache(withName: "myCache")
try? fetchedResultsController.performFetch()
tableView.reloadData()是否有一种方法可以让fetchedResultsController看到更改而不必手动刷新所有内容?
注意:如果我在主应用程序的核心数据中插入某些内容,fetchedResultsController会自动看到更改并更新表(与预期的一样)。
发布于 2020-08-05 16:44:02
要在应用程序和扩展之间共享数据库,需要实现持久历史跟踪。有关介绍,请参见20:49的WWDC 2017核心数据中的新内容,而示例代码请参见文档消费相关商店的变更。
基本思想是启用存储选项NSPersistentHistoryTrackingKey,观察NSPersistentStoreRemoteChangeNotification,在收到通知后,您应该使用NSPersistentHistoryChangeRequest获取更改,然后使用mergeChangesFromContextDidSaveNotification和transaction.objectIDNotification合并到上下文中。然后您的NSFetchedResultsController将相应地更新。
发布于 2020-06-29 16:12:49
这是正常的,因为应用程序扩展和主应用程序不是在同一个进程中工作。
在主应用程序中有一些更新数据的方法。
我使用UserDefaults和refreshAllObjects函数作为viewContext。
示例:
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")
}
}刷新所有对象函数如下:
viewContext.perform {
viewContext.stalenessInterval = 0.0
viewContext.refreshAllObjects()
viewContext.stalenessInterval = -1
}https://stackoverflow.com/questions/62615712
复制相似问题