2014-04-24 22 views
9

OSX uygulamasından bazı görüntüler içeren bir plist oluşturuyorum. Sonra iOS uygulaması için bir şablon olarak bu Plist dosyasını kullanıyorumNSData için NSImage, ardından UIImage için

[NSKeyedArchiver archivedDataWithRootObject:self.someImage] 

, ancak bu OSX için sadece olduğu gibi burada (NSImage için UIImage ve ne kadar dosyayı dönüştürmek alamazsınız: görüntüyü yazıyorum).

bu hatayı alıyorum:

* Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '* -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (NSImage)'

bana yukarıdaki gerçekleştirmek için bir yol önerin.

cevap

16

OS X:

NSData *imageData = [self.someImage TIFFRepresentation]; 
// save imageData to file 

iOS: Bunun yerine, NSImageNSData dönüştürmek NSImage 'ın TIFFRepresentation yöntemi kullanmak NSKeyedArchiver kullanmanın

dosyadan görüntü verilerini okuma, daha sonra UIImage'ın +imageWithData: kolaylık kurucusunu kullanarak bir UIImage'a dönüştürün:

NSData *imageData = ...; // load imageData from file 
UIImage *image = [UIImage imageWithData: imageData]; 
+1

Sanırım "TIFFRepresentation" burada –

+0

Oops , düzeltildi. Teşekkürler! –

3

Daha sonra okunan, yani tasarruf sonra NSBitmapImageRep oluşturmak ve gerek NSData+[UIImage imageWithData:] ile UIImage için:

NSString *filepath; 
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath]; 

NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil]; 
// Save the data 

Ayrıca eğer imageRepWithData: kullanabilirsiniz: OS X

Birincisi, verileri kaydetmek Zaten resmin NSData var - yukarıdaki bir dosyadan yükler (alsoNSImage ile yapabilirsiniz). iOS'taki Sonra

:

NSData *data; // Load from a file 
UIImage *image = [UIImage imageWithData:data]; 

representationUsingType:properties: sözlüğe diğer evcil anahtarlar için here bakınız.

+1

UIImagePNGRepresentation() yukarıdaki kodu yanlış kullanılıyor: işlev kastedilmektedir bir UIImage örneği dönüştürmek için NSData nesnesini bir UIImage'a dönüştürmek için değil, bir NSData nesnesi. Bakınız: https://developer.apple.com/library/ios/documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIImagePNGRepresentation –

-1

kullanarak NSData içine NSImage dönüştürmek elma dahili API aşağıdaki gibi:

UIImage *MyImage = [UIImage imageNamed:@"WhateverDir/MyImage.png"]; 
NSData *MyImageData = UIImagePNGRepresentation(MyImage); 
+1

UIImage'ı (yani iOS) NSImage (yani, OS X) değil dönüştürüyorsunuz –