如何在Realm数据库上存储基元列表(NSString)

时间:2018-01-23 02:13:46

标签: objective-c realm

我试图利用Realm Cocoa 3.0中引入的功能:存储基元列表。在该版本之前,唯一的方法是创建一个新的RLMObject子类,其中包含@property NSString *stringValue之类的属性,然后在模型上创建一个RLMArray属性,用于使用字符串数组,整数或任何其他原语。有关详细信息,请参阅this answer

根据Realm Cocoa 3.0 announcement我们现在支持基元数组,在使用Swift的示例中显示可以创建数据库模型

class Student : Object {
    @objc dynamic var name: String = ""
    let testScores = List<Int>()
}

那么,如何使用Objective-C创建这样的属性?我一直试图做类似以下代码的事情:

@interface Game : RLMObject
@property NSString *name;
@property RLMArray<NSString *> *tags;  // First attempt
// @property NSArray<NSString> *tags;  // Second attempt
@end

到目前为止,我的尝试都没有成功,因为我收到错误:Terminating app due to uncaught exception 'RLMException', reason: 'Property 'tags' requires a protocol defining the contained type - example: RLMArray<Person>.'

1 个答案:

答案 0 :(得分:1)

来自Realm's documentation

  

RLMArray可以存储原始值来代替Realm对象。为此,请使用以下协议之一约束RLMArrayRLMBoolRLMIntRLMFloatRLMDoubleRLMStringRLMDataRLMDate

您的声明将是:

@property RLMArray<RLMString> *tags;

或者,如果您还想使用Objective-C泛型:

@property RLMArray<NSString *><RLMString> *tags;