我是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)
更新:
现在,您可以直接在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支持的所有其他语言也支持基本类型列表。
Realm 不支持NSArrays 的模型属性,并且当前不支持List基本类型的 s 属性(例如List字符串的 s)。现在,您应该创建一个Nickname包装昵称字符串的模型,然后存储 a List<Nickname>,如上面的示例代码所示。
我们 GitHub 存储库上的这张票证跟踪了对原语列表的支持,尽管 2014 年的评论不再特别相关。如果您想了解该功能何时可用,您可以关注该票证。
(另请注意,您应该将列表属性声明为let,而不是var。)
| 归档时间: |
|
| 查看次数: |
3985 次 |
| 最近记录: |