ios - 是否可以使用 NSManagedObjectID 数组执行 NSBatchUpdateRequest?

标签 ios swift core-data

目前,我通过以下代码执行多个更新操作。

func updateOrders(_ updates : [(objectID: NSManagedObjectID, order: Int64)]) {
    if updates.isEmpty {
        return
    }
    
    let coreDataStack = CoreDataStack.INSTANCE
    let backgroundContext = coreDataStack.backgroundContext

    backgroundContext.perform {
        for update in updates {
            let objectID = update.objectID
            let order = update.order
            let nsPlainNote = try! backgroundContext.existingObject(with: objectID) as! NSPlainNote
            nsPlainNote.order = order
        }
        RepositoryUtils.saveContextIfPossible(backgroundContext)
    }
}
既然我想
  • 使更新操作运行得更快
  • 避免 NSFetchedResultController 的代表被通知

  • 我想使用 NSBatchUpdateRequest用于执行此类更新操作。
    但是,我没有找到方法,如何应用 NSManagedObjectID 的数组和 Int64 的数组值,到 NSBatchUpdateRequest .
    给定一个数组 NSManagedObjectIDInt64 , 是否可以使用 NSBatchUpdateRequest在 CoreData 上执行更新?

    最佳答案

    您必须使用 NSPredicate设置对象ID

    func updateOrders(_ updates : [(objectID: NSManagedObjectID, order: Int64)]) {
        updates.forEach {
            let request = NSBatchUpdateRequest(entityName: "NSPlainNote")
            request.propertiesToUpdate = ["order": $0.order]
            request.predicate = NSPredicate(format: "objectID == %@", $0.objectID)
            let result = try? context.execute(request)
        }
    }
    

    关于ios - 是否可以使用 NSManagedObjectID 数组执行 NSBatchUpdateRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66944339/

    相关文章:

    ios - 如何实现水平滚动/分页 View Controller ?

    ios - CAGradientLayer Mask 在 Swift 中添加不透明度

    ios - 我是否需要获得 "Always"授权才能进行后台位置更新?

    ios核心数据回滚

    ios - UICollectionView 显示每个部分的滚动指示器(标题 zIndex 损坏)

    ios - 编译器会从产品二进制文件中的依赖静态库中剥离不相关的拱形符号吗?

    ios - iOS 10 的推送通知问题

    javascript - 在 NodeJS/JavaScript 中使用 iOS Swift Date()

    ios - 无法在控制台中打印我的json数据?

    ios - 无法使用类型为 "save"的参数列表调用 "(nil)'