2017-03-22 44 views
1

我有一个名为List的对象,它的子类领域的Object类:存储自定义对象的数组中的境界

class List: Object { 
    dynamic var brandListItems: [BrandListItem] = [] 
} 

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

class BrandListItem: Object { 
    dynamic var brandID: String? 
    dynamic var name: String? 
} 

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

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

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

回答

3

你需要使用Realm的List<T>属性。请注意,这不是标志着dynamic

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

class List: Object { 
    let brandListItems = RealmSwift.List<BrandListItem>() 
} 

注意,有必要限定领域斯威夫特的List<T>用模块从您的新声明的List类歧义的。

+1

另请注意,'List '属性应该用'let'而不是'var'声明。而且你可能会遇到问题,创建一个名为'List'的新类,然后尝试在其中使用Realm Swift的'List'。你可能需要为你的班级选择一个不同的名字,或者完全限定'RealmSwift.List '。 – bdash

+0

谢谢@bdash。为什么我无法在类的初始设置中执行'var brandListItems = RealmSwift.List ()',然后在failable初始化器中执行'self.brandListItems = RealmSwift.List (array)'(where数组是'[BrandListItem]') –

+1

您应该使用'let'声明'List '属性的原因是Realm没有办法让_assignment_截取与Objective-C不兼容的类型的属性(例如,任何Swift泛型类型)。分配给这种财产不会导致财产的价值持续存在。您应该声明该属性为'let brandListItems = RealmSwift.List ()',然后_mutate_现有属性值(即'self.brandListItems.append(contentsOf:array)'),在您的初始化程序中填充它。 – bdash

相关问题