Cryptic Core Data NSInvalidArgumentException原因:'无效关系'

时间:2016-05-29 06:59:17

标签: ios swift core-data

我正在尝试更新Core Data中的关系,但遇到了这个问题。我有2个实体:TripGPSLocationTrip可以有多个GPSLocationGPSLocation只能在一个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
  }   

0 个答案:

没有答案