ios - NSBatchUpdateRequest 在 Swift 中引发错误

标签 ios swift xcode core-data

这是我的NSBatchUpdateRequest:

    let batchUpdateRequest = NSBatchUpdateRequest(entityName: "WLItem")
    batchUpdateRequest.predicate = NSPredicate(format: "source != rt")
    batchUpdateRequest.propertiesToUpdate = ["position": 2]
    batchUpdateRequest.resultType = NSBatchUpdateRequestResultType.UpdatedObjectsCountResultType

    do {
        let batchUpdateResult = try NSManagedObjectContext.MR_defaultContext().executeRequest(batchUpdateRequest) as! NSBatchUpdateResult
    } catch {
        print("error: \(error)")
    }

控制台输出为:

error: NilError

出了什么问题?是XCode7的问题吗?我第一次使用 NSBatchUpdateRequest ,所以我不知道以前是否是这样。对我来说,该代码应该可以正常工作。

最佳答案

您必须刷新 ManagedContextObject 才能更新数据库。我创建了一个函数,其中使用 NSBatchUpdateRequest 来更新数据库。下面是函数:-

 let managedContext = SharedInstance.appDelegate?.persistentContainer.viewContext


func updateDataFromTable(tableName:String, idOfPaticularTable ID:String, updatedDict:Dictionary<String, String>, success:@escaping (_ response:Bool)-> Void, failure:@escaping (_ error: Error?) -> Void) {

    let batchRequest = NSBatchUpdateRequest(entityName: tableName)
    let predicate = NSPredicate(format: "id == %@", ID)

    batchRequest.predicate = predicate
    batchRequest.propertiesToUpdate = updatedDict

    batchRequest.resultType = .updatedObjectIDsResultType
    do {
        // Execute Batch Request
        let batchUpdateResult = try managedContext?.execute(batchRequest) as! NSBatchUpdateResult

        // Extract Object IDs
        let objectIDs = batchUpdateResult.result as! [NSManagedObjectID]

        for objectID in objectIDs {
            // Turn Managed Objects into Faults
            let managedObject = managedContext?.object(with: objectID)
            managedContext?.refresh(managedObject!, mergeChanges: false)
        }
        success(true)
    } catch let error as NSError {
        print(error)
        failure(error)
    }
}

struct SharedInstance {

   static let appDelegate = UIApplication.shared.delegate as? AppDelegate

   static let employeetable = "EmployeeModel"
}

关于ios - NSBatchUpdateRequest 在 Swift 中引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440803/

相关文章:

ios - UIAlertcontroller 设置属性消息

ios - iOS 应用程序可以通过套接字进行通信吗?

ios - 从类实现时 UIButton 不可单击

iphone - Linea Pro 扫描条码问题

ios - UICollectionViewController 中的 ALAssets 不显示图像

ios - 如何在 Xcode 8 中使用 Swift 3 创建 managedObjectContext?

ios - 对于 iOS 6 和 7,如何以必须位于状态栏下方的方式自定义导航栏 `y-position`?

Swift 函数不会让我返回 Bool,即使函数有返回值

xcode - 测试 mac 通用二进制文件

xcode - 如何在新的 iOS iTunes Connect UI 中拒绝二进制文件?