在 Realm 中存储一组自定义对象

Zac*_*iro 6 realm swift

我有一个名为ListRealmObject类的子类的对象:

class List: Object {
    dynamic var brandListItems: [BrandListItem] = []
}
Run Code Online (Sandbox Code Playgroud)

和另一个对象,BrandListItem它也子类为Object

class BrandListItem: Object {
    dynamic var brandID: String?
    dynamic var name: String?
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序因以下错误而崩溃

'属性'brandListItems' 被声明为'NSArray',它不是受支持的RLMObject 属性类型。所有属性都必须是原语、NSString、NSDate、NSData、NSNumber、RLMArray、RLMLinkingObjects 或 RLMObject 的子类。

我尝试做一些RLMArray<BrandListItem>()没有运气的事情。我如何成功地将这些对象保存到 Realm?

dmo*_*row 6

您需要使用 Realm 的List<T>属性。请注意,它没有标记dynamic

https://realm.io/docs/swift/latest/#to-many-relationships

class List: Object {
   let brandListItems = RealmSwift.List<BrandListItem>()
}
Run Code Online (Sandbox Code Playgroud)

请注意,有必要使用 Realm Swift 的List<T>模块来限定它,以消除它与您新声明的List类的歧义。

  • 您应该使用 `let` 声明 `List&lt;T&gt;` 属性的原因是 Realm 无法拦截 _assignment_ 与 Objective-C 不兼容的类型的属性(例如,任何 Swift 泛型类型)。分配给这样的属性不会导致该属性的值被持久化。您应该改为将属性声明为`let brandListItems = RealmSwift.List&lt;BrandListItem&gt;()`,然后_mutate_现有的属性值,(即,`self.brandListItems.append(contentsOf: array)`),在您的初始化程序中填充它。 (2认同)