ios - 一对多关系的 NSBatchUpdateRequest

标签 ios swift core-data

我正在尝试使用 NSBatchUpdateRequest 来更新一对多关系。

我的实体Presentation有多个Slide,是另一个实体,它们是反比关系。

enter image description here enter image description here

当我尝试更新幻灯片时,出现此错误:

*** 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无效关系((),名称幻灯片,isOptional 1,isTransient 0,实体演示,重命名标识符幻灯片,验证谓词( ), 警告 ( ), versionHashModifier (null) 用户信息 { }, 目标实体 Slide, inverseRelationship presentation, minCount 0, maxCount 0, isOrdered 0, deleteRule 1) 传递给 propertiesToUpdate:'

我已尝试搜索此错误,但找不到任何结果。

我的代码:

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 更新得很好,所以我认为这不是更新关系的正确方法。

如果有人需要更多代码,请告诉我。感谢您的帮助。

最佳答案

我认为你需要将这个批处理请求分成两个, 一个用于 Presentation 类实例:

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

第二个是幻灯片类实例,您可以使用谓词进行过滤:

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]

关于ios - 一对多关系的 NSBatchUpdateRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37170148/

相关文章:

ios - setEnabledTextCheckingTypes 无法识别的选择器发送到实例

ios - GdataXML(Ray Wenderlich 的 iPhone RSS 阅读器教程)

ios - iTunnesConnect 中的应用名称

ios - 如何避免雷达图中 X 轴值和 Y 轴值重叠?

swift - 如何在 Swift 中更改 iOS 弹出窗口中箭头的背景颜色?

ios - 可滚动的 UITableView 在 Swift 中向上滑动到屏幕顶部

swift - 如何减少这个 Swift NSLayoutConstraint 代码?

ios - 使用 NSFetchedResultsController 在 tableView 中没有数据 View

cocoa - Cocoa 基于文档的应用程序中的 MVC

ios - 快速存储临时数据的最佳实践