I am creating a plist from my OSX app that contains some images. I am writing the image by :
[NSKeyedArchiver archivedDataWithRootObject:self.someImage]
Then I am using this plist file as a template for iOS app, but here I can't convert the file to UIImage
and neither to NSImage
(as this is only for OSX).
I am getting this error:
* Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '* -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (NSImage)'
Please suggest me a way to perform the above.
OS X:
Instead of using NSKeyedArchiver
to convert an NSImage
to NSData
, use NSImage
's TIFFRepresentation
method:
NSData *imageData = [self.someImage TIFFRepresentation];
// save imageData to file
iOS:
Read the image data from the file, then convert it to a UIImage using UIImage's +imageWithData:
convenience constructor:
NSData *imageData = ...; // load imageData from file
UIImage *image = [UIImage imageWithData: imageData];
You need to create a NSBitmapImageRep
and then save that, then read the NSData
to UIImage
with +[UIImage imageWithData:]
:
First in OS X, save the data:
NSString *filepath;
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath];
NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil];
// Save the data
You could also use imageRepWithData:
if you have NSData
of the image already - the above will load it from a file (like you can also do with NSImage
).
Then in iOS:
NSData *data; // Load from a file
UIImage *image = [UIImage imageWithData:data];
See here for the other allowed keys for the dictionary in representationUsingType:properties:
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With