我需要觀察領域對象的List類型值。如何在觀察領域時獲得「舊」值清單類型由kvo
當觀察者被調用時,我需要訪問新的和舊的值。
問題是a不能訪問observeValueForKeyPath函數中的「舊」值。
如果我在該功能中記錄「更改」,它將顯示以下內容而不是傳統的「舊」&「新」。
Optional(["new": <__NSArrayI 0x7fcc8bc57150>(
User {
}
)
, "indexes": <_NSCachedIndexSet: 0x7fcc8bc07970>[number of indexes: 1 (in 1 ranges), indexes: (1)], "kind": 2])
這些是什麼意思,我怎樣才能訪問「舊」價值?
import UIKit
import RealmSwift
class ValueContainer: Object {
let users = List<User>()
}
class User: Object {
}
class ViewController: UIViewController {
let container = ValueContainer()
override func viewDidLoad() {
super.viewDidLoad()
container.users.appendContentsOf([User(), User(), User(), User()])
container.addObserver(self, forKeyPath: "users", options: [.New, .Old], context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
print("---- Observer called ---")
print("KeyPath:\(keyPath)")
guard let container = object as? ValueContainer else {
print("Object cast failed")
return
}
print("Change")
print(change)
}
@IBAction func buttonTap(sender: AnyObject) {
container.users.insert(User(), atIndex: 1)
}
}
我沒有看到代碼中實際將對象添加到Realm的地方。你只是觀察一個Object的一個集合屬性,所以你回到'change'參數集合的變化,而不是單個元素。 –
我需要觀察一個領域對象模型,不管它是否保存到領域。 – Bigair