SwiftData单向关系保存失败报错Code=1570的问题咨询
SwiftData单向关系保存失败报错Code=1570的问题咨询
我尝试在SwiftData项目里实现单向关系,按道理这应该是可行的,但一直被报错卡着,实在摸不透原因,想请大家帮忙分析下。
我定义了这样两个模型:
@Model final class Quota { @Attribute(.unique) var id: UUID var allowance: Int @Relationship(inverse: nil) var fish: Fish init(id: UUID = UUID(), fish: Fish, allowance: Int) { self.id = id self.fish = fish self.allowance = allowance } } @Model final class Fish { @Attribute(.unique) var id: Int var name: String init(id: Int, name: String) { self.id = id self.name = name } }
之后我尝试用下面的代码保存Quota记录:
let quota: Quota = .init(fish: Fish(id: 2, name: "Salmon"), allowance: 50) modelContext?.insert(quota) try save()
但每次都会触发这个错误:
SwiftData.DefaultStore save failed with error: Error Domain=NSCocoaErrorDomain Code=1570 "%{PROPERTY}@ is a required value." UserInfo={NSValidationErrorObject=<NSManagedObject: 0x600002217390> (entity: Fish; id: 0x83319d001151328d <x-coredata://C76A2A64-146E-432F-A565-319B5A2F23F5/Fish/p12>; data: { id = nil; }), NSLocalizedDescription=%{PROPERTY}@ is a required value., NSValidationErrorKey=id, NSValidationErrorValue=null} %{PROPERTY}@ is a required value.
特别奇怪的是,如果我给两个模型加上反向关系,数据就能正常保存。我完全清楚单向和双向关系的区别,当前的业务场景确实只需要单向关系。另外补充个细节:数据库里本来就存在对应的Fish记录,但就算我删掉现有记录再尝试保存,还是会报同样的错。
有没有大佬能帮我解惑,为什么用单向关系保存就会出现这个错误呢?麻烦大家了!
备注:内容来源于stack exchange,提问作者Shane H. Kalinski




