2016-04-02 1 views
2

Ich möchte überprüfen, ob Elemente wurden schnell in einem Array mit KVO hinzugefügt, und ich kopierte im Wesentlichen das Beispiel aus der Apple-Dokumentation, aber wenn der Code ausgeführt wird, tut es nicht fangen, wenn die Größe des Arrays aktualisiert wird. Hier ist, was ich habe jetzt:Mit KVO zu sagen, wenn Elemente zu einem Array hinzugefügt wurden

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) 
    } 
} 

Nachdem ich die Shows zum Array hinzufügen, habe ich showCount gleich die Anzahl der Elemente im Array, jedoch ist es nicht drucken „X-Shows wurden hinzugefügt“ auf der Konsole . Meine Funktion viewDidLoad() ruft einfach die Funktion auf, die dem Array Elemente hinzufügt, und sonst nichts.

+0

Ich kann dieses Problem nicht reproduzieren. Hier ist mein Kern (von einem Spielplatz): https://gist.github.com/rnapier/f3354765347631b1208892fe30e0fd31 Es druckt "2 Shows wurden hinzugefügt." Können Sie Ihren genauen Code posten, der das Problem aufzeigt? –

Antwort

0

leider Sie können nicht auf einen Int als Beobachter hinzufügen, da es nicht NSObject

die Apple Docs und die Suche nach „Schlüsselwert Beobachten“

Sie verwenden Beobachten Schlüssel-Wert sehen ist eine Unterklasse mit einer Swift-Klasse, solange die Klasse von der NSObject-Klasse erbt.

Ansonsten sieht Ihr KVO-Kode-Code gut für mich.

Wenn Sie benachrichtigt werden möchten, wenn Inhalte Ihrer Arrays zu ändern, könnten Sie versuchen, was @ Paul Patterson empfiehlt und use a proxy object

Verwandte Themen