Skip to content

Instantly share code, notes, and snippets.

@yccheok
Created July 22, 2021 14:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yccheok/9a9357d2e0bb152a85ba8ce34b32c0b0 to your computer and use it in GitHub Desktop.
Save yccheok/9a9357d2e0bb152a85ba8ce34b32c0b0 to your computer and use it in GitHub Desktop.
updateOrders
func updateOrders(_ updates : [(objectID: NSManagedObjectID, order: Int64)]) {
if updates.isEmpty {
return
}
let coreDataStack = CoreDataStack.INSTANCE
let backgroundContext = coreDataStack.backgroundContext
backgroundContext.perform {
var objectIDs: [NSManagedObjectID] = []
do {
for update in updates {
let batchUpdateRequest = NSBatchUpdateRequest(entityName: "NSTabInfo")
batchUpdateRequest.predicate = NSPredicate(format: "self == %@", update.objectID)
batchUpdateRequest.propertiesToUpdate = ["order": update.order]
batchUpdateRequest.resultType = .updatedObjectIDsResultType
let batchUpdateResult = try backgroundContext.execute(batchUpdateRequest) as? NSBatchUpdateResult
guard let batchUpdateResult = batchUpdateResult else { continue }
guard let managedObjectIDs = batchUpdateResult.result else { continue }
if let nsManagedObjectIDs = managedObjectIDs as? [NSManagedObjectID] {
objectIDs.append(contentsOf: nsManagedObjectIDs)
}
}
if !objectIDs.isEmpty {
let changes = [NSUpdatedObjectsKey : objectIDs]
coreDataStack.mergeChanges(changes)
}
} catch {
backgroundContext.rollback()
error_log(error)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment