In welchen Situationen würde ein Objekt nicht die kodierende Kodierung des Schlüsselwerts sein?

StackOverflow https://stackoverflow.com/questions/1163828

Frage

Derzeit lerne ich all das Zeug in der Kodierung des Schlüsselwerts.

In den Dokumenten sagen sie:

Jedes Objekt in der Schlüsselpfadsequenz, das nicht für den entsprechenden Schlüssel entsprechenden Schlüsselwert-Codierungskodierungen ist, empfängt eine Meldung von ValueforeNeFinedKey:

Ich versuche mir eine Situation vorzustellen, in der ein Objekt kein Schlüsselwert-Codierungs-konform ist. Wie könnte das passieren? Wenn ich eine UIView unterklasse, ist das offensichtlich konform, oder? Aber wenn ich nur mein eigenes Objekt mit NSObject als Superklasse mache, wie ist das das? Und wenn ich eine Klasse ohne Superklasse mache, dann ist dies nicht KV -konform?

War es hilfreich?

Lösung

Wenn Sie sorgfältig lesen, werden Sie feststellen, dass die Codierungskodierung der Schlüsselwerte entspricht Für den entsprechenden Schlüssel". Dies bedeutet im Grunde, dass Sie nicht die entsprechenden KVC -Methoden für den Schlüssel haben, nach dem Sie gefragt haben. [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"], es wird durchfallen bis zu valueForUndefinedKey: Weil NSString nicht KVC-konform für den Schlüssel "Dispingsauce" ist-es hat kein dippingSauce Instanzmethode oder a dippingSauce Ivar.

Andere Tipps

Es heißt: "Das ist kein Schlüsselwert-Codierungs-konform Für den entsprechenden Schlüssel. "Was das bedeutet, ist das

@interface MyObject : NSObject {
  NSString *foo;
  NSString *bar;
}

@property (nonatomic, retain) NSString *foo;
@property (nonatomic, retain) NSString *bar;

@end

@interface MyObject

@synthesize foo;
@synthesize bar;

@end

Ist konform für "Foo" und "Bar", aber nicht "baz".

Für einfache Eigenschaften, die alles gibt, ist standardmäßig alle NSObject -Unterklassen grundlegend KVC implementieren. Bei Sammlungen wird es schwieriger. Damit KVC korrekt für Sammlungen funktioniert (damit Sie Dinge wie:

NSArray *people = ... ;
NSArray *firstNames = [people valueForKey:@"firstName"];

Sie müssen bestimmte zusätzliche Methoden implementieren. Im Allgemeinen sind die Kakao -Bindungen (die auf dem iPhone nicht verfügbar ist) aus Coredata (was ohnehin zusätzliche Sammelmethoden generiert. Im Allgemeinen die Mühe machen sich nicht die Mühe, die volle KVC -Unterstützung für Wörterbücher oder Arrays in ihren Objekten zu implementieren, es sei denn, sie beabsichtigen, sie tatsächlich aufzudecken. Du kannst lesen Über Compliance im KVC -Leitfaden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top