我正在尝试更新Core Data中的关系,但遇到了这个问题。我有2个实体:Trip
和GPSLocation
。 Trip
可以有多个GPSLocation
但GPSLocation
只能在一个Trip
中,因此从Trip
到{{1}的一对多关系}}。我在Xcode的模型编辑器中设置了我的实体,如下所示:
实体:GPSLocation
关系:GPSLocation
目的地:trip
反向:Trip
类型:gps
实体:To one
关系:Trip
目的地:gps
反向:GPSLocations
类型:trip
假设变量To many
是Trip实体的一个实例。在我的更新例程中,我有:
trip
这段代码给我一个NSInvalidArgumentException原因:'无效关系',我不知道为什么。任何帮助将非常感谢!谢谢。
编辑:我的谓词非常简单: let request = NSBatchUpdateRequest(entityName: "GPSLocations")
request.predicate = somePredicate
request.propertiesToUpdate = ["trip": trip]
request.resultType = .UpdatedObjectIDsResultType
do {
let responses = try managedContext.executeRequest(request) as! NSBatchUpdateResult
print responses.result!
} catch let error as NSError {
print(error)
}
。我确认通过数据库可视化工具存在pk 1的记录。
编辑2:
所以我做了一些进一步的测试,并注意到我为创建和更新实体中的记录而编写的2个例程。与NSPredicate(format: "SELF = %@", "1")
例程不同,我在使用update
例程时不会遇到此无效关系问题。这是我的两个例程的代码:
create
}
// MARK - this routine works fine
func createRecord(entityName: String, fromKeyValue: [String:AnyObject]) -> AnyObject {
let entityDesc = NSEntityDescription.entityForName(entityName, inManagedObjectContext: managedContext)
do {
let entityType = NSClassFromString("myapp." + entityName) as! NSManagedObject.Type
let entity = entityType.init(entity: entityDesc!, insertIntoManagedObjectContext: managedContext)
for key in fromKeyValue.keys {
entity.setValue(fromKeyValue[key], forKey: key)
}
try managedContext.save()
return entity
} catch let error as NSError {
return error
}