如何使用Dictionary将字符串数组存储到Realm实例中?

Moh*_*hah 8 realm swift3

我是Realm的新手并且遇到了这个问题.

我有Dictionary这样的

{
    firstName : "Mohshin"
    lastName : "Shah"
    nickNames : ["John","2","3","4"]              
}
Run Code Online (Sandbox Code Playgroud)

class这样

class User: Object {
    var firstName: String?
    var lastName: String?
    var nickNames: [String]?
}
Run Code Online (Sandbox Code Playgroud)

当我尝试插入值时,它会抛出异常,如下所示

属性"nickNames"声明为"NSArray",它不是受支持的RLMObject属性类型.所有属性必须是原语NSString,NSDate,NSData,NSNumber,RLMArray,RLMLinkingObjects,或子类RLMObject.
有关更多信息,请参阅https://realm.io/docs/objc/latest/api/Classes/RLMObject.html.
我也试过了

var nickNames =  NSArray()

var nickNames =  NSMutableArray()
Run Code Online (Sandbox Code Playgroud)

但是没有工作.我是否需要制作Nickname模型类并创建一个属性如下,或者有一种方法可以做到这一点?

var nickNames =  List<Nickname>()
Run Code Online (Sandbox Code Playgroud)

bmu*_*unk 6

更新:

现在,您可以直接在RLMArrays或List中存储原始类型或其可为空的对应类型(更具体地说:布尔值,整数和浮点数类型,字符串,日期和数据)。如果要定义此类原始值的列表,则不再需要定义繁琐的单字段包装对象。相反,您可以只存储原始值本身。

基本值列表的工作方式与包含对象的列表的工作方式大致相同,如以下示例针对Swift所示:

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

// Retrieve a student.
let realm = try! Realm()
let bob = realm.objects(Student.self).filter("name = 'Bob'").first!

// Give him a few test scores, and then print his average score.
try! realm.write {
    bob.testScores.removeAll()
    bob.testScores.append(94)
    bob.testScores.append(89)
    bob.testScores.append(96)
}
print("\(bob.testScores.average()!)")   // 93.0
Run Code Online (Sandbox Code Playgroud)

Realm支持的所有其他语言也支持基本类型列表。


Aus*_*inZ 0

Realm 不支持NSArrays 的模型属性,并且当前不支持List基本类型的 s 属性(例如List字符串的 s)。现在,您应该创建一个Nickname包装昵称字符串的模型,然后存储 a List<Nickname>,如上面的示例代码所示。

我们 GitHub 存储库上的这张票证跟踪了对原语列表的支持,尽管 2014 年的评论不再特别相关。如果您想了解该功能何时可用,您可以关注该票证。

(另请注意,您应该将列表属性声明为let,而不是var。)