我正在尝试使用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更新得很好,所以我不认为这是更新关系的正确方法。
如果任何人需要更多的代码,请让我知道。感谢任何帮助。
2条答案
按热度按时间yduiuuwa1#
我认为你需要将这个批处理请求分为两个,一个是Presentation类示例:
第二个是Slides类示例,您可以使用 predicate 过滤:
eyh26e7m2#
(archived) documentation说明
NSBatchUpdateRequest
“不能用于改变关系”。