Unarchive UIImage object devuelve CGSizeZero image utilizando NSKeyedUnarchiver en iOS 8

Tengo este código trabajando en iOS 7:

NSData *imageData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView.image]; UIImage *imageCopy = [NSKeyedUnarchiver unarchiveObjectWithData:imageData]; NSLog(@"%@",NSStringFromCGSize(imageCopy.size)); 

pero en iOS 8, el tamaño de imageCopy siempre es cero. Lo mismo sucede cuando archive UIImageView , la image de imageView no archivada tiene un tamaño cero. Descubrí que en iOS 7, el encabezado UIImage es como:

 UIImage : NSObject <NSSecureCoding, NSCoding> 

pero en iOS 8 es:

 UIImage : NSObject <NSSecureCoding> 

Parece que NSCoding protocolo NSCoding en iOS 8. Tengo que codificar los datos de image reales: UIImagePNGRepresentation(self.imageView.image) lugar de la image para asegurarme de que UIImagePNGRepresentation(self.imageView.image) una buena image.

¿Alguien sabe por qué pasa esto? ¿Es para la compatibilidad con versiones anteriores? Noté que en iOS la versión anterior UIImage no se ajusta a NSCoding .

UIImage : NSObject <NSSecureCoding> no es un problema porque NSSecureCoding henetworkinga NSCoding .

De todos modos, confirmé que el problema se puede reproducir con el siguiente código:

 UIImage *img = [UIImage imageNamed: @"myImage"]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img]; UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data]; NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> (null), {0, 0} 

Por otro lado, el siguiente código funciona como se esperaba:

 UIImage *img = [UIImage imageNamed: @"myImage"]; UIImage *img2 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:img.imageOrientation]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img2]; UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data]; NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> <UIImage: 0x7fa013e766f0>, {50, 53} 

No sé por qué, tal vez error?

Creo que esto está relacionado con la propiedad imageAsset o traitCollection introducida en iOS8