说我有一个类及其领域表示形式,如下所示:
class Dog {
var identifier: String
var age: Int
...
override static func primaryKey() -> String? {
return "identifier"
}
}
现在这是我新的Identifier类的样子:
class Identifier {
var functionalId: String
var version: String
...
}
我需要将Dog的标识符String属性替换为这样的标识符:
class Dog {
var identifier: Identifier
var age: Int
...
override static func primaryKey() -> String? {
return "identifier" // I need to change this
}
}
但是我很难替换primaryKey()方法的内容:
如何告诉Realm为primaryKey()查找对象的子属性?
我尝试过类似的事情:
override static func primaryKey() -> String? {
return "identifier.functionalId"
}
但是似乎我太天真了,它行不通
** 编辑 **以下评论,这是我收到的崩溃的输出:
Terminating app due to uncaught exception 'RLMException', reason: 'Primary key property 'identifier.functionalId' does not exist on object Dog
对不起,英语不好,我找不到这个简单问题的单词,尤其是标题!
答案 0 :(得分:0)
如何告诉Realm为对象寻找对象的sub属性 primaryKey()
你不能。
查看您提到的错误:
如果您尝试将主键设置为:
override static func primaryKey() -> String? {
return "identifier"
}
然后,您会收到来自Realm的错误消息:Property 'identifier' cannot be made the primary key of 'Dog' because it is not a 'string' or 'int' property.
如果您尝试将主键设置为:
override static func primaryKey() -> String? {
return "identifier.functionalId"
}
然后,您会收到来自Realm的错误消息:Primary key property 'identifier.functionalId' does not exist on object Dog
这得出一个结论,即主键必须为String
或Int
类型,并且它必须是Dog
的属性,而不是另一个类。
答案 1 :(得分:0)
我从未在Realm中尝试过此操作,但是可能可以使用动态变量作为主键以及从子对象中提取值的函数:
var _identifier: Identifier
dynamic lazy var identifier: String = self.identifierValue()
override static func primaryKey() -> String? {
return "identifier"
}
func identifierValue() -> String {
return _identifier.functionalId
}