小编lui*_*izv的帖子

NSFetchedResultsController 不跟踪来自应用程序扩展的 CoreData 更改

一年多以来,我几乎每天都在积极使用 StackOverflow,但这是我在这里问的第一个问题。没有其他问题能抓住我的确切问题。关闭解决方案不起作用或不适用于我的情况。

我在做什么

我正在开发一个带有共享扩展的 iOS 应用程序。扩展应用程序将链接保存到 CoreData 中,包含(主)应用程序,展示了使用 NSFetchResultsController 保存的此链接的列表。

主要的应用程序是 Xcode 提供的 Master-Detail 模板,修改非常小。

我创建了一个嵌入式框架来承载 CoreData 内容并设置一个应用程序组来托管 CoreData 并以通常的方式在应用程序之间共享它。

CoreData 部分工作正常:我可以将对象插入到 ContextObjectManager 中,只要我的主应用程序处于活动状态,我就可以立即在那里查询这个插入的对象。

问题

当 MasterViewController 无法更新 tableView 时,问题就开始了。我推断 NSFetchedResultsController 实例在主应用程序之外发生时不会跟踪 CoreData 更改。

我在听应用程序激活时尝试了一些方法:

func becomeActive(notification: NSNotification) {

    //Approach 1: Making sure to delete cache -- even though I do not have a persistent named cache file.        
    NSFetchedResultsController.deleteCacheWithName(nil)

    //Approach 2: Making sure to reload tableView data.
    self.tableView.reloadData()

    }
Run Code Online (Sandbox Code Playgroud)

它没有任何效果。

self.fetchedResultsController.sections![0].numberOfObjects它总是等于展示单元的数量。然后,如果我与扩展共享一些新的东西然后回来,这个数字不会改变,但DataManager.getAllManagedObjectsFromEntity(Link.entityDescription()).objects.count等于这个数量 + 1。

然后,当我关闭应用程序并再次打开它时,它会同步并且显示的单元格数 = 获取的对象数 = …

core-data nsfetchedresultscontroller ios swift ios-app-extension

7
推荐指数
1
解决办法
759
查看次数