Frage

Im Idealfall wird eine NSCoding konforme Klasse arbeiten, wie mit encodeWithCoder erwartet: und initWithCoder: (zumindest dachte ich bis vor kurzem), ohne dass der Entwickler über die Mühe zu haben, was in den Routinen geht (es sei denn, meine Idee eines NSCoding konformen Klasse total vermasselt!)

Die UIImageView Klasse NSCoding konform. Also sollte ich ja nicht stören, wie es serialisiert werden / de-serialisiert die NSKeyedArchiver und NSKeyedUnarchiver Klassen. Aber jedes Mal, wenn ich versuche, ein UIImageView Objekt kodieren, erhalte ich eine Fehlermeldung, dass UIImage nicht encodeWithCoder erkennt. Verfahren

Nun ist die UIImageView intern verwendet ein UIImage-Objekt. Aber sollte nicht die Codierung genommen haben Sorge, dass sich?

Oder ist die NSCoding Compliance in der Dokumentation angegeben, nur der Benutzer weiß, dass sie die initWithCoder und encodeWithCoder Methoden implementieren können?

Kann jemand bitte klären Sie dies für mich! Ich bin gründlich verwirrt!

War es hilfreich?

Lösung

Die Dokumentation ist irreführend - UIImage nicht NSCoding nicht entspricht, wie Sie gesagt haben. Sie können (in einer primitiven Weise) um es arbeiten, indem sie die Arbeit selbst zu tun:

@interface UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)encoder;
@end

@implementation UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder {
  NSData *pngData = [decoder decodeObjectForKey:@"PNGRepresentation"];
  [self autorelease];
  self = [[UIImage alloc] initWithData:pngData];
  return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:UIImagePNGRepresentation(self) forKey:@"PNGRepresentation"];
}
@end

Andere Tipps

Diese Frage verdient ein Update seit iOS 5.1 Funktionalität für NSCoding zu UIImage hinzugefügt und Nathan de Vries Antwort wird nun dazu führen, Warnungen mit den neuesten Compiler.

Diese Frage bietet eine Lösung , um das Problem zu arbeiten, wenn Ihre App iOS unterstützt vor 5.1. Es tut im Grunde die gleiche Sache Nathan schlägt vor, sondern überprüft, ob das Verfahren bereits vorhanden ist oder nicht, anstatt es schwer Codierung.

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