在Realm中存储一个简单的数组,而不在Swift中创建托管列表

时间:2017-02-03 20:35:27

标签: swift realm

我有一系列数据不需要是托管列表,这意味着我不需要Realm为具有链接的项目创建新模型,并且能够查询项目,我只想要一个简单的数组,通常是那些不会从Object继承的原语,它将与我的主对象一起保存。

我能想到的唯一解决方案是使用NSData和NSKeyedArchiver / NSKeyedUnarchiver。这是最好/唯一的方法吗?我是否应该使用List,即使我不认为我需要它 - 这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

Realm不支持基元数组(尽管该功能即将推出),因此最直接的解决方案是使用填充了仅包装基元的模型对象的List。如果您认为更适合您的特定用例,那么在NSData之间存档以及将数据存储在您的Realm模型中并没有错。

答案 1 :(得分:0)

这是我决定如何处理这个问题:

var instructions: [String] {
  get {
    if _instructions == nil {
      _instructions = NSKeyedUnarchiver.unarchiveObject(with: instructionsData) as? [String]
    }
    return _instructions!
  }
  set {
    instructionsData = NSKeyedArchiver.archivedData(withRootObject: newValue)
    _instructions = newValue
  }
}
fileprivate var _instructions: [String]? = nil
dynamic var instructionsData = Data()

override static func ignoredProperties() -> [String] {
  return ["instructions", "_instructions"]
}

这样我可以像往常一样使用数组,并且仍然以一种简单的方式保持它(不必创建实际的List并且必须管理一堆新模型/对象)。