gpt4 book ai didi

ios - NSFetchedResultsControllerDelegate 委托(delegate)方法未被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:56:43 27 4
gpt4 key购买 nike

这是我的代码:

class FetchResultControllerDataProvider: NSObject, NSFetchedResultsControllerDelegate {

private let fetchedResultController: NSFetchedResultsController
private var delegate: TodayViewController!

init(fetchedResultController: NSFetchedResultsController, delegate: TodayViewController) {
self.fetchedResultController = fetchedResultController
self.delegate = delegate

super.init()
self.fetchedResultController.delegate = self
try! self.fetchedResultController.performFetch()
}

func controllerWillChangeContent(controller: NSFetchedResultsController) {
print("Controller will change")
}

func controllerDidChangeContent(controller: NSFetchedResultsController) {
print("COntroller did changed")
}

func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
print("Controller did change section")
}

func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
print("Controller did change object at indexpath")
}
}


func loadData() {
let request = NSFetchRequest(entityName: Transaction.entityName)
request.predicate = Transaction.defaultPredicate
request.sortDescriptors = []
request.returnsObjectsAsFaults = false
request.fetchBatchSize = 20

let frc = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
let dataProvider = FetchResultControllerDataProvider(fetchedResultController: frc, delegate: self)
dataSource = TableViewDataSource(tableView: self.tableView, dataProvider: dataProvider, delegate: self)
}

当我添加数据时,FetchResultControllerDataProvider 中的两个方法都没有被调用。但我不明白为什么。

有人可以帮我吗?

编辑:

添加数据:

func addTransaction() {
self.context.performChanges {
Transaction.insert(self.context, name: self.name.text!, amount: Double(self.amount.text!)!, type: self.currentTypeTag)
}

public func saveOrRoleback() -> Bool {

do {
try save()
return true
} catch {
rollback()
return false
}
}

public func performChanges(block: () -> ()) {

performBlockAndWait {
block()
self.saveOrRoleback()
}
}

所以调用了这部分代码,并没有抛出任何错误。
但是我试着查看核心数据的sql文件,好像是空的。所以没有添加数据。

最佳答案

添加数据时,您需要检查 delegate 和 fetchedResultsController 对象是否仍然存在并正确填充。您可以尝试打印这些变量的值吗?

self.fetchedResultController

self.fetchedResultController.delegate

当您添加数据时,数据是否被插入到您的 PersistentStore 中?

关于ios - NSFetchedResultsControllerDelegate 委托(delegate)方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647629/

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