我在使用Swift 4编译的iOS上使用Realm时遇到了这个问题,启动时应用程序崩溃,并显示以下消息
RLMException', reason: 'Primary key property 'serial' does not exist on object 'Book''
我看到了类似的错误消息,但不是同一个。这是我的对象的外观
import Foundation
import RealmSwift
class Book: Object {
dynamic var serial: String = ""
dynamic var title: String = ""
dynamic var pages: Int = 0
dynamic var genre: String = ""
override static func primaryKey() -> String? {
return "serial"
}
}
当我通过Realm Browser应用程序检查默认的.realm文件时,我注意到这些条目只有一个#(0,1,2),其中没有数据。如果我注解掉主键,它会运行,但在Realm中没有存储此对象的任何内容。不知道为什么它会崩溃!
8条答案
按热度按时间wyyhbhjk1#
计算主键不起作用(如从嵌入式对象劫持id,见下面的代码):
因此,您必须在init()中创建一个普通的
@Persisted var id: String
集,并可能使用didSet跟踪one2one依赖关系(在我的示例中,头文件具有键)。领域对象观察器realm swift: how could I trap on object being invalidated?。可能会有一些用处吗?我认为didSet应该足够了。5us2dqdw2#
在我的情况下,同样的问题诞生了,我忘记在参数中写入
@objc
我的案例错误是
由修复
ee7vknir3#
虽然这不一定是关于迁移,但iOS 13和Xcode 11中有一个问题可能会导致这个问题。Realm类的所有String属性都被忽略了,默认值为
String
。你可以通过更新到最新版本(目前是3.20.0)来修复这个问题,然后在Xcode上:产品-〉全新构建文件夹。如果你用的是可可豆,请这样做:
打开项目的Podfile,并将RealmSwift行替换为:
然后,在项目文件夹中打开终端,并:
wko9yo5t4#
在Realm中,模型的属性必须具有
@objc dynamic var
属性,这正是我所缺少的。来自Realm网站:
领域模型属性必须具有
@objc dynamic var
属性才能成为基础数据库数据的访问器。请注意,如果类声明为@objcMembers
(Swift 4或更高版本),则单个属性只能声明为dynamic var
。w80xi6nr5#
tvmytwxo6#
我有一个类似的问题,但我的是由于事实上,我正在转换一个非领域类领域类。我原来有:
...但我需要将“let”更改为“var”:
从错误消息中看不出这是问题所在,但它立即修复了问题。
2sbarzqh7#
使用新版本的Realm更改Pod文件中的Realm,如下所示:
从
至
确保所有字段定义如下:
wfveoks08#
在我的例子中,在类名的顶部添加@objMembers可以解决这个问题
例如: