2008-12-18 17 views
5

Ich hatte eine einfache Methode, Schlüssel/Wert-Paare eines XML-Ausschnitts in ein NSDictionary umzuwandeln, als ich eine einfache iPhone-Anwendung startete. Das Problem besteht darin, dass ich die Instanzen von NSDictionary, die meine UITableViews einmal gefüllt haben, in benutzerdefinierte Klassen umwandeln muss, weil sie Verhalten und zusätzliche Komplexität erfordern. Das Problem hier ist, dass jetzt, damit ich ein Objekt instanziieren und seine Instanzvariablen mit Schlüssel/Wert-Paaren aus einem Webdienst füllen kann, so viel schwieriger wird. Ich kann es nicht mehr in eine Methode werfen, die das XML durchläuft und KVC verwendet, um seine Instanzvariablen zu setzen.Key-Value Coding

Welche andere Lösung gibt es?

Antwort

8

Sie können Schlüsselcodierungsmethoden weiterhin für Ihre benutzerdefinierte Klasse verwenden, solange Sie Ihre Variablen entsprechend benennen. Dort gibt es keinen Unterschied. Wenn ich jedoch mit XML arbeite, teste ich normalerweise jeden Knotennamen oder erstelle eine Schlüsseltabelle, da die Namen in der Datenquelle, mit der ich arbeite, nicht mit Schlüsselwerten kompatibel sind. Wenn Sie jedoch die Kontrolle über die Datenquelle haben, können Sie einfach weiter setValue:forKey: verwenden.

Ich würde empfehlen, this guide über Schlüsselwertcodierung zu lesen, wenn Sie nicht bereits haben. Es ist grundlegend für viele großartige Tools in Cocoa.

+0

Das klingt gut, Marc. Können Sie erklären, was Sie damit meinen, dass Namen in der Datenquelle nicht mit Schlüssel/Wert-Kodierung kompatibel sind? Und wofür testen Sie Ihre Knoten? – Coocoo4Cocoa

+0

Großschreibung spielt eine Rolle, aber auch Knotennamen stimmen nicht immer mit dem Variablennamen überein. Beispielsweise könnte DetailPageURL zu pageURL, Titel zu Titel usw. zugeordnet werden. –

1

Schauen Sie in NSCoding. Sie können das NSCoding-Protokoll verwenden, um Ihr Objekt, Eigenschaften und alle als Daten zu speichern.

Sobald Ihr Objekt NSCoding-kompatibel ist, können Sie das gesamte Array von Objekten mit NSKeyedArchiver archivieren.

Bitte beachten Sie, dass bei einer großen Anzahl von Objekten die Leistung der App beim Laden und Speichern des iPhone stark beeinträchtigt werden kann.

+0

NSCoding sieht wie eine großartige Lösung aus, August. Ich bin jedoch besorgt über die Leistungseinbußen für die Verwendung. Meine Objekte enthalten typischerweise 5/6 Instanzvariablen, grundlegende Datentypen. Ich frage mich, wie viele es dauern würde, um meine App zu tanken. – Coocoo4Cocoa

+0

Er arbeitet jedoch mit einem XML-Webdienst und fragt nicht, wie er seine Objekte in einer Datenquelle aufbewahren soll. –

+0

Positiv oder negativ beeinflussen? –