使用元组保存数据时遭遇Core Data错误求助
解决Core Data保存时的NSInvalidArgumentException错误
咱们先拆解下你遇到的问题:崩溃发生在调用CoreDataManager.shared.createJobNote(jobNote: jobNote, job: job)这行,错误信息已经把问题说得明明白白——Core Data里JobNote实体的note属性期望的是NSString类型,但你实际传进去的是Job类型的对象,类型完全不匹配,所以直接触发了崩溃。
接下来给你几个排查和修复的方向:
- 检查
jobNote对象的note属性赋值:大概率是你在创建或赋值jobNote的时候,不小心把Job实例塞给了note字段,比如写成了jobNote.note = job,而不是你要保存的字符串内容。得确认这里是把正确的字符串赋值给note,把Job对象赋值给对应的关联字段(比如jobNote.job = job)。 - 核对
createJobNote方法的实现:去看看CoreDataManager里这个方法的代码,是不是在给Core Data实体的note属性赋值时,错用了job变量,而不是jobNote.note。比如可能写成了coreDataNote.note = job,这肯定会出问题。 - 验证Core Data模型配置:打开你的xcdatamodeld文件,找到
JobNote实体的note属性,确认它的类型是String(对应Objective-C的NSString),而不是被误设成了和Job的关系类型。
给你举个正确的示例参考:
// 正确的jobNote模型赋值 let jobNote = YourJobNoteModel() jobNote.note = "这是要保存的笔记内容" // 这里是字符串 jobNote.relatedJob = job // 这里关联Job对象 // CoreDataManager里的createJobNote方法正确实现 func createJobNote(jobNote: YourJobNoteModel, job: Job) -> (success: Bool, error: Error?) { let context = persistentContainer.viewContext let coreDataNote = JobNoteEntity(context: context) coreDataNote.note = jobNote.note // 传递字符串到note属性 coreDataNote.job = job // 关联Job实体 do { try context.save() return (true, nil) } catch { return (false, error) } }
核心就是把类型匹配好,别把对象和字符串搞混,找到赋值错误的地方修正就可以解决这个崩溃了。
内容的提问来源于stack exchange,提问作者spoax
相关产品推荐
相关产品推荐

