Einfach ausgedrückt, gibt es eine Möglichkeit, eine allgemeine Benachrichtigung zu erhalten, wenn eine Eigenschaft in einer Objective-C-Klasse geändert wird? Ich weiß, dass ich KVO verwenden kann, um bestimmte Eigenschaftsänderungen zu überwachen, aber ich muss eine bestimmte Methode aufrufen, wenn eine setProperty:
Nachricht an meine Klasse gesendet wird. Ich möchte in der Lage sein, eine allgemeine Benachrichtigung ohne Bedenken darüber zu erhalten, welche Eigenschaft speziell geändert wurde.Eine Änderung an jeder Klasseneigenschaft in Objective-C beobachten
Wenn es hilft zu erklären, warum ich dies tun wollen, ich bin Verwendung einiger schnellen Tabellen Scrollen Code machen hier: http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/
Teil des Prozesses dies zu erreichen, besteht darin, dass, wenn eine Eigenschaft in einer Tabellenansicht Zelle wird geändert, [ self setNeedsDisplay ]
muss aufgerufen werden. Ich möchte lieber nicht die Setter-Methoden für jede Eigenschaft in meiner Klasse überschreiben, nur um diesen Aufruf zu machen.
Hm. Scheint so, als würde ich in diesem Fall das Konzept der abhängigen Schlüssel missbrauchen. Ich nehme an, ich beobachte einfach jede Eigenschaft einzeln. Ich hätte schwören können, dass es einen generischen Weg dafür gab. Wie wäre es mit einer Möglichkeit, den Namen der Nachricht abzufangen, die über die Laufzeit an eine Klasse weitergegeben wird? – LucasTizma
Nicht wirklich.Rufen Sie einfach den abhängigen Schlüssel 'propertiesChanged' oder etwas ähnliches auf und es wird ziemlich genau sein. MALALC bei Apple schlägt diese Technik in seinem Cocoa Bindings Beispiel und Hinweisen vor: http://homepage.mac.com/mmalc/CocoaExamples/controllers.html ... Wie "den Namen der Nachricht abzufangen, die an eine Klasse übergeben wird", I Angenommen, Sie meinen * alle * Nachrichten, die an eine Klasse gesendet werden. Dies würde entweder ein Proxy-Objekt erfordern oder sich in die 'objc_msgSend()' Laufzeitfunktion einklinken, wobei die letztere massiv langsam und hackisch wäre und es wirklich nicht wert wäre. – Chuck