gpt4 book ai didi

swift - NSFetchedResultsController 不从后台上下文(DATAStack)更新

转载 作者:可可西里 更新时间:2023-11-01 02:16:11 26 4
gpt4 key购买 nike

我正在使用 NSFetchedResultsController 和 DATAStack .如果我在其他上下文中进行任何更改,我的 NSFetchedResultsController 不会更新我的表。

我在我的 NSFetchedResultsController 中使用 dataStack.mainContext。如果我从 mainContext 做任何更新,一切都很好。但是,如果我编写这样的代码:

        dataStack.performInNewBackgroundContext({ (backgroundContext) in
// Get again NSManagedObject in correct context,
// original self.task now in main context
let backTask = backgroundContext.objectWithID(self.task.objectID) as! CTask

backTask.completed = true
let _ = try? backgroundContext.save()
})

NSFetchedResultsController 不更新单元格。例如,如果我重新加载应用程序或整个 View ,我将看到更新的数据。

数据保存没有错误(我已经检查过了)。

我尝试检查是否收到了 NSManagedObjectContextDidSaveNotification,但如果我在收到通知后执行 .performFetch(),我会再次在表中获取旧数据。

最佳答案

终于搞定了,不是上下文问题。

如果 NSFetchedResultsChangeTypeMove,我在 NSFetchedResultsControllerDelegatedidChangeObject 函数中使用了这种类型的代码(即事件是由于排序而生成的,我认为):

guard let indexPath = indexPath, newIndexPath = newIndexPath else { return }
_tableView?.moveRowAtIndexPath(indexPath, toIndexPath: newIndexPath)

这是不正确的(我不知道为什么 NSFetchedController 在数据更改时生成移动事件而没有“重新加载数据事件”),我用下一个代码替换了它,现在一切正常。

guard let indexPath = indexPath, newIndexPath = newIndexPath else { return }
_tableView?.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
_tableView?.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: UITableViewRowAnimation.Fade)

关于swift - NSFetchedResultsController 不从后台上下文(DATAStack)更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com