При перемещении строки в списке SwiftUI я отмечаю, что из-за моего вызова «сохранить основные данные» переход интерфейса прерывается. Я вызываю save против основных данных, так как изменился orderNum элементов списка, так что я меняю это. Видео и код ниже:
![enter image description here](https://i.stack.imgur.com/lsmtV.gif)
Код - извлечение из моего представления 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)")
}
}
}
}