• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:32:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这是我的代码:

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文件,它似乎是空的。所以没有添加数据。



Best Answer-推荐答案


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

self.fetchedResultController

self.fetchedResultController.delegate

您的PersistentStore 中添加数据时是否插入了数据?

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap