我在CoreData中有一个Job
模型,在这个对象中我有job_id
和start_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
是我Job
与JobImage
的关系。
我用Cocoa error 1550
阅读了一些StackOverflow问题,但没有一个答案似乎适用于我的问题。你有什么想法吗?