Nach Apple und zahlreichen Beispielen, die ich gesehen habe, gibt es kein Problem mit KVO/KVC, um selbst zu beobachten. Auch nach den gleichen Quellen, es ist kein Problem, das Aufstellen von mit addObserver: forKeyPath: Optionen: Kontext: in einem Init-Methode des Objekts, a la:Odd Problem mit addObserver: forKeypath: Optionen: Kontext: in Init Methode
- (id)init
{
self = [super init];
if (self) {
[self addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:NULL];
}
return self;
}
Leider aus irgendeinem Grunde, mein Beobachter Methode nicht werde gerufen wenn ich es dort mache. Wenn ich den addObserver Anruf an eine andere Methode zu bewegen und dann diese Methode in der aufrufenden Methode aufrufen:
MyObject *newObj = [[MyObject alloc] init];
[newObj setupObservers];
Dann ist alles in Ordnung. Dies ist eine Unterklasse von NSImageView, also ist es nicht so, dass es hier eine 'watchFromNib'-Alternative gibt ... Ich kratze mir hier wirklich den Kopf und bin mir sicher, dass ich etwas Offensichtliches vermisse - wie eine Regel über Dinge, die das tun Ursache KVO auf Selbst nicht in Init-Methoden arbeiten, aber ich habe nichts in den Dokumenten gefunden, die mir hier Hinweise geben würde.
Was weiß ich nicht?
Dies ist keine Antwort auf Ihre Frage, aber Sie sollten immer einen eindeutigen Zeiger als Wert für den Kontext übergeben, nicht NULL. Wenn NSImageView oder eine Unterklasse Ihrer Klasse beginnt, die ausgewählte Eigenschaft von self zu beobachten, würde alles schief gehen, wenn Sie beide auf diese Weise NULL verwenden würden. –