与NS提取结果控制器的并发性

时间:2017-12-06 13:35:51

标签: ios swift core-data concurrency nsfetchedresultscontroller

之前我使用过核心数据,但是我刚刚使用NSPersistentContainer采用了一个新的核心sata堆栈,并正在解决一个新问题。

设置:所以我有一个tableview,它通过NSFetchedResultsController加载数据。每行有2个文本字段。我的目标是在用户输入时保存输入到这两个文本字段的用户数据。每当更改textfield中的值时,我还需要它来更新NSFetchedResultsController的委托,因为我在FRC的委托中有计算函数,它计算用户在两个文本字段中键入的数字。

问题在于,每当我更新由textfieldDidChange操作修改的核心数据对象时,它都会取消编辑,因为我认为主要线程被核心数据写入阻止。

FRC代码

  let context = coreDataController.viewContext
    let fetchRequest = NSFetchRequest<NumbersMO>(entityName: "Numbers")
    // Configure the request's entity, and optionally its predicate

    let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    Controller.delegate = self

TextFieldDidChange代码

@objc func textFieldDidChange(sender: UITextField) {
    let number = Double(sender.text)

    let object = controller(object at: indexPath)

    object.value1 = number // This freezes main thread and causes editing to stop

    }

目标是在用户输入用户数据时立即保存用户数据,同时通知FRC代表更改,以便在不阻塞主线程的情况下更新我的计算。

以前有人解决过这个问题吗?

编辑:处理格式化,现在卡在手机上

0 个答案:

没有答案