更新CoreData中的现有属性失败

时间:2016-05-27 19:09:20

标签: ios swift cocoa core-data

我在CoreData中有一个Job模型,在这个对象中我有job_idstart_date之类的值以及与JobImage的一对多关系一个CoreData模型。

如果我创建一个新的Job对象并将其与一些Images一起保存,则一切正常。看起来像这样:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

let managedContext = appDelegate.managedObjectContext

let entity = NSEntityDescription.entityForName("Job", inManagedObjectContext: managedContext)
job = Job(entity: entity!, insertIntoManagedObjectContext: managedContext)
job?.setValue(NSDate(), forKey: "start_date")
job?.setValue(true, forKey: "running")
if let id = jobJson.id {
    job?.setValue(id, forKey: "job_id")
}

do {
    try managedContext.save()
} catch let error as NSError {
    print("Could not save \(error), \(error.userInfo)")
} catch {
    print("Something unexpected happened...")
}

并添加这样的图像:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

let managedContext = appDelegate.managedObjectContext

let jpegImage = UIImageJPEGRepresentation(image, 1.0)

let entity = NSEntityDescription.entityForName("JobImage", inManagedObjectContext: managedContext)

let imageObject = JobImage(entity: entity!, insertIntoManagedObjectContext: managedContext)
imageObject.data = jpegImage
imageObject.job = job

do {
    try managedContext.save()
} catch let error as NSError {
    print("Could not save \(error), \(error.userInfo)")
} catch {
    print("Something unexpected happened...")
}

其中job是我之前创建的Job对象(我将其保存在全局变量中,如job = Job(entity: entity!, insertIntoManagedObjectContext: managedContext)),而image只是一个UIImage。 JobImage对象具有data属性,即“二进制数据” 我将job属性与Job对象的关系设置为job并保存结果。

我之前提到的所有内容都很有效,但如果我不创建新实体但我获取现有实体并尝试将关系添加到新JobImage并保存结果,则会失败。获取对象效果很好,我可以访问存储在Job对象中的所有属性,但将另一个图像保存到images关系失败。
我像这样获取Job对象:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

let managedContext = appDelegate.managedObjectContext

let fetchRequest = NSFetchRequest(entityName: "Job")
fetchRequest.predicate = NSPredicate(format: "running == true")

do {
    let results = try managedContext.executeFetchRequest(fetchRequest)
    let jobs = results as! [Job]
    if jobs.count > 0 {
        job = jobs[0]
    }
} catch let error as NSError {
    print("Could not fetch \(error), \(error.userInfo)")
} catch {
    print("Something unexpected happened...")
}

同样,我将Job对象存储在我的全局属性job中,并使用它创建与图像的新关系并像以前一样保存它们,但这次它失败并出现以下错误:

  

无法保存错误域= NSCocoaErrorDomain代码= 1550“操作无法完成。(Cocoa错误1550)。”UserInfo = {NSValidationErrorObject =(entity:Job; id:0xd000000000040000

...

  

NSValidationErrorValue:托管对象上的关系'job_images'(0x7fb094029f10)(实体:作业;​​ ID:0xd000000000040000

...

  

NSValidationErrorKey:job_images,NSLocalizedDescription:无法完成操作。 (可可错误1550。)]

job_images是我JobJobImage的关系。

我用Cocoa error 1550阅读了一些StackOverflow问题,但没有一个答案似乎适用于我的问题。你有什么想法吗?

0 个答案:

没有答案