SwiftUI List «заикается» при перемещении строк, запускается сохранением Core Data для обновления orderNum - PullRequest
0 голосов
/ 24 апреля 2020

При перемещении строки в списке SwiftUI я отмечаю, что из-за моего вызова «сохранить основные данные» переход интерфейса прерывается. Я вызываю save против основных данных, так как изменился orderNum элементов списка, так что я меняю это. Видео и код ниже:

enter image description here

Код - извлечение из моего представления SwiftUI

private var tasksFetchRequest : FetchRequest<GCTask>
private var gcTasks : FetchedResults<GCTask> { tasksFetchRequest.wrappedValue }

init(withGcList gcList:GCList) {
    self.currentList = gcList
    self.tasksFetchRequest = FetchRequest(
        entity: GCTask.entity(),
        sortDescriptors: [NSSortDescriptor(key: "orderNum", ascending: true)],
        predicate: NSPredicate(format: "gcList == %@", currentList)
    )
}

    private func updateOrderNums(startIndex: Int, destIndex: Int, inc: Int) {
        var currIndex = startIndex
        while currIndex <= destIndex {
            gcTasks[currIndex].orderNum = gcTasks[currIndex].orderNum + Int64(inc)
            currIndex += 1
        }
    }

    fileprivate func moveRow(fromStartIndex taskStartIndex: IndexSet.Element, toDestIndex taskDestIndex: Int, movingDown moveDown: Bool) {
        gcTasks[taskStartIndex].orderNum = gcTasks[taskDestIndex].orderNum
        updateOrderNums(
            startIndex: moveDown ? taskStartIndex + 1 : taskDestIndex,
            destIndex: moveDown ? taskDestIndex : taskStartIndex - 1,
            inc: moveDown ? -1 : 1
        )

        // Save
        GCCoreData.save() // <<== JERKINESS OCCURS DUE TO THIS
    }

Код - библиотечные функции, называемые

class GCCoreData: NSObject {

    static func save() {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error performing Core Data save: \(nserror), \(nserror.userInfo)")
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...