之前我使用过核心数据,但是我刚刚使用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代表更改,以便在不阻塞主线程的情况下更新我的计算。
以前有人解决过这个问题吗?
编辑:处理格式化,现在卡在手机上