使用objectAtIndex从RLMResult获取时,忽略的属性会丢失

时间:2014-11-20 10:29:57

标签: ios swift realm

我有这个型号:

enum PhotoState: String {
  case New = "New"
  case Downloaded = "Downloaded"
  case Failed = "Failed"
}

class Photo: RLMObject {
  dynamic var id = 0
  dynamic var name = ""
  dynamic var imageURLString = ""

  var state = PhotoState.New

  override class func primaryKey() -> String! {
    return "id"
  }

  override class func ignoredProperties() -> [AnyObject]! {
    return ["state"]
  }
}

我在表格视图中提出这个问题:

override func viewDidLoad() {
    super.viewDidLoad()

    photos = Photo.allObjects()
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // Return the number of rows in the section.
    if let count = photos?.count {
        return Int(count)
    }
    return 0
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let photo = photos?.objectAtIndex(UInt(indexPath.row)) as? Photo {
        downloadPhoto(photo, indexPath: indexPath)
    }
}

func downloadPhoto(photo: Photo, indexPath: NSIndexPath) {
    // Fake Download
    switch photo.imageURLString.lastPathComponent {
    case "7.png":
        photo.state = .Failed
    default:
        photo.state = .Downloaded
    }
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}

如果我点击一行,该行应该更新并具有新状态,但是照片记录的状态属性又回到了。新的。

RLMResult的objectForIndex是否初始化了一个新的模型实例?

1 个答案:

答案 0 :(得分:3)

每当一个对象存储在Realm中时,只有那些不被忽略的属性"再次存储和检索。每当你从Realm获得对象时,"被忽略"属性只会出现默认值。

所以使用"忽略"当你例如属性时,属性最有用。有一个独立的对象,最初在Realm之外使用。然后,当您想要将其添加到Realm时,您希望不存储某些属性。

领域对象的属性不存储在对象本身中。它们直接在数据库中检索/存储,对象只是作为代理。