ios 一对多关系的NSBatchUpdateRequest

uidvcgyl  于 2023-04-13  发布在  iOS
关注(0)|答案(2)|浏览(98)

我正在尝试使用NSBatchUpdateRequest更新一对多关系。
我的实体“演示文稿”有多个幻灯片,幻灯片是另一个实体,它们具有相反的关系。

当我尝试更新幻灯片时,我得到此错误:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:'传递给propertiesToUpdate的关系((),name slides,isOptional 1,isTransient 0,entity Presentation,renamingIdentifier slides,validation predicate (),warnings(),versionHashModifier(null)userInfo { },destination entity Slide,inverseRelationship presentation,minCount 0,maxCount 0,isOrdered 0,deleteRule 1)无效:'

我尝试搜索此错误,但找不到任何结果。
我的代码:

let entity = NSEntityDescription.entityForName("Presentation", inManagedObjectContext: managedObjectContext)
let batchRequest = NSBatchUpdateRequest(entity: entity!)
batchRequest.resultType = .UpdatedObjectIDsResultType
batchRequest.propertiesToUpdate = ["date_updated": formattedDateUpdated, "slides": presentationSlides]

do {
      let batchUpdateResult = try managedObjectContext.executeRequest(batchRequest) as! NSBatchUpdateResult
      let objectIds = batchUpdateResult.result as! [NSManagedObjectID]

      for objectId in objectIds {
          let managedObject = managedObjectContext.objectWithID(objectId)

          managedObjectContext.refreshObject(managedObject, mergeChanges: false)
      }
 } catch {
          let updateError = error as NSError
          print(updateError)
 }

date_updated更新得很好,所以我不认为这是更新关系的正确方法。
如果任何人需要更多的代码,请让我知道。感谢任何帮助。

yduiuuwa

yduiuuwa1#

我认为你需要将这个批处理请求分为两个,一个是Presentation类示例:

let entity = NSEntityDescription.entityForName("Presentation", inManagedObjectContext: managedObjectContext)
let batchRequest = NSBatchUpdateRequest(entity: entity!)
batchRequest.resultType = .UpdatedObjectIDsResultType
batchRequest.propertiesToUpdate = ["date_updated": formattedDateUpdated]

第二个是Slides类示例,您可以使用 predicate 过滤:

let entity = NSEntityDescription.entityForName("Slide", inManagedObjectContext: managedObjectContext)
let batchRequest = NSBatchUpdateRequest(entity: entity!)
batchRequest.resultType = .UpdatedObjectIDsResultType
batchRequest.predicate = NSPredicate(format: "presentation = %@ \(somePresentation)");
batchRequest.propertiesToUpdate = ["some_property": newValue]
eyh26e7m

eyh26e7m2#

(archived) documentation说明NSBatchUpdateRequest“不能用于改变关系”。

相关问题