作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有映射类(简化模型)
class Album: Object, Mappable {
dynamic var id = 0
var images : List<AlbumImage>?
override static func primaryKey() -> String? {
return "id"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
images <- (map["images"], ListTransform<AlbumImage>())
}
}
class AlbumImage: Object, Mappable {
dynamic var src = ""
override static func primaryKey() -> String? {
return "src"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
src <- map["src"]
}
}
class AnotherAlbum: Object {
dynamic var id = 0
var images = List<AlbumImage>()
override static func primaryKey() -> String? {
return "id"
}
}
映射是完美的,但需要用现有的AlbumImage创建另一个对象
let aa = AnotherAlbum()
aa.id = album.id
aa.images.append(objectsIn: album.images!)
或
let aa = AnotherAlbum()
aa.id = album.id
aa.images = album.images!
然后我删除这个创建的对象 realm.delete(aa),重新启动应用程序并从上层代码再次创建
获取错误
Terminating app due to uncaught exception 'RLMException', reason: 'Can't create object with existing primary key value 'https://example.com/1.jpg'.'
如何正确链接存在于另一个模型的对象但不创建它们?
最佳答案
简单的事实是 Realm 不允许两个单独的 Object
具有匹配的主键。您不能实例化一个全新的对象(即使用 let newImage = AlbumImage()
),然后将其添加到数据库中,因为 Realm 会尝试将其视为一个完全独立的图像。
如果您创建一个新的非托管Object
,那么当您尝试将其附加到List
时,在同一个事务中,它会尝试将该对象添加到Realm以及。正是在这一点上,如果新对象具有与现有对象匹配的主键,则会发生异常。
为避免这种情况,您可以做两件事:
realm.add(albumImage, update: true)
。这会将具有相同主键的新对象与数据库中已有的对象合并。祝你好运!
关于ios - 境界 swift 。如何使用主键链接到现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694343/
我是一名优秀的程序员,十分优秀!