Почему UIImage в этом фрагменте кода восстанавливается в исходное состояние, когда я пытаюсь его кодировать и декодировать с помощью NSKeyedArchiver?Почему UIImage не был успешно декодирован?
Я ожидаю, что «decodedImage» будет содержать изображение после декодирования, но вместо этого это просто NULL.
// Any image here seems to repro the issue
UIImage *image = [UIImage imageNamed:@"soda.jpg"];
// This prints YES (1), just a sanity check.
NSLog(@"Confirms %d", [[UIImage class] conformsToProtocol:@protocol(NSCoding)]);
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[coder encodeObject:image forKey:@"image"];
[coder finishEncoding];
// I would expect this to be large, instead it's < 1kb.
NSLog(@"Data length is: %zu", (unsigned long)data.length);
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
// This prints YES (1)
NSLog(@"containsValueForKey returns %d", [decoder containsValueForKey:@"image"]);
// decodedImage is NULL here, even though containsValueForKey returned YES
UIImage *decodedImage = [decoder decodeObjectForKey:@"image"];
[decoder finishDecoding];
В этом случае, я не искал обходной путь, как превращение UIImage в NSData первого и кодирования, что. Причина в том, что я пытаюсь воспроизвести несвязанный фрагмент кода, который использует что-то вроде этого, и я пытаюсь понять его.
Код работает, как ожидается, если я повернул изображение сначала через nsdata и обратно в uiimage, почему?
UIImage *originalImage = [UIImage imageNamed:@"soda.jpg"];
NSData *imageData = UIImagePNGRepresentation(originalImage);
UIImage *image = [UIImage imageWithData:imageData];
Я думаю, что эта странность связана с тем, что UIImage, созданный с использованием [UIImage imageNamed:], не сериализуется так же, как другие UIImages, возможно потому, что он знает, что изображение появилось из пакета приложений ... –