2016-04-02 2 views
2

要素がKVOを使用して素早く配列に追加されているかどうかを確認したいのですが、Appleのドキュメンテーションの例をコピーしました。配列のサイズが更新されたときにキャッチしません。ここで私は今持っているものです:私は配列に番組を追加した後KVOを使用して要素が配列に追加されたことを通知する

class ShowDirectory: NSObject { 
    var shows = [Show]() 
    dynamic var showCount = Int() 
    func updateDate(x: Int) { 
     showCount = x 
    } 
} 

class MyObserver: NSObject { 
    var objectToObserve = ShowDirectory() 
    override init() { 
     super.init() 
     objectToObserve.addObserver(self, forKeyPath: "showCount", options: .New, context: &myContext) 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if context == &myContext { 
      if let newValue = change?[NSKeyValueChangeNewKey] { 
       print("\(newValue) shows were added") 
      } 
     } else { 
      super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
     } 
    } 

    deinit { 
     objectToObserve.removeObserver(self, forKeyPath: "myDate", context: &myContext) 
    } 
} 

、私は配列の要素数に等しいshowCountを設定し、しかし、それはコンソールに「Xショーが追加された」印刷されません。 。私のviewDidLoad()関数は、配列に要素を追加する関数を呼び出すだけです。

+0

私はこの問題を再現することはできません。ここに私の要点(遊び場から):https://gist.github.com/rnapier/f3354765347631b1208892fe30e0fd31それは "2ショーが追加されました。"問題を示す正確なコードを投稿できますか? –

答えて

0
それは Apple Docsを参照してください NSObject

をサブクラス化し

あなたはキー値監視を使用することができ、「キー値監視」を検索しないようあなたは、残念ながら、Intにオブザーバーとして追加することはできません

クラスがNSObjectクラスから継承している限り、Swiftクラスを使用します。

そうしないと、KVOボイラープレートのコードがうまく見えます。

あなたの配列の内容を変更するときに通知を受けたい場合は、@Paulパターソンが推奨するものを試みることができるとuse a proxy object

関連する問題