Mam ten kod pracujących na iOS 7:Zdezarchiwizuj obiektu UIImage zwraca CGSizeZero obraz przy użyciu NSKeyedUnarchiver na iOS 8
NSData *imageData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView.image];
UIImage *imageCopy = [NSKeyedUnarchiver unarchiveObjectWithData:imageData];
NSLog(@"%@",NSStringFromCGSize(imageCopy.size));
ale na iOS 8, rozmiar imageCopy
„s jest zawsze zero. To samo dzieje się, gdy archiwizuję UIImageView
, obraz zarchiwizowany w ramach obrazu stanu ma zerowy rozmiar. I okazało się, że w iOS 7, UIImage
nagłówek jest tak:
UIImage : NSObject <NSSecureCoding, NSCoding>
ale na iOS 8 to:
UIImage : NSObject <NSSecureCoding>
Wygląda protokołu NSCoding
brakuje na iOS 8. Mam do kodowania rzeczywiste dane obrazu: UIImagePNGRepresentation(self.imageView.image)
zamiast obrazu, aby upewnić się, że otrzymam dobry obraz z powrotem.
Czy ktoś wie, dlaczego tak się dzieje? Czy to dla kompatybilności wstecznej? Zauważyłem, że w poprzedniej wersji iOS UIImage
nie jest zgodny z NSCoding
.
Ten kod działa poprawnie na systemów iOS 8/Xcode6 przynajmniej dla mnie. Dostaję {0, 0} tylko dla obrazów, które są zerowe, dla wszystkich innych dostaję {640, 640} itd. – kabarga
Nie działa dla mnie, używam Xcode6 wersji 6.0.1 na iOS8, a ty? – gabbler
Wersja 6.0.1 (6A317) i wypróbowana na iPhone 5s. – kabarga