2014-04-24 10 views
9

Ich erstelle eine Liste von meiner OSX-App, die einige Bilder enthält. Ich schreibe das Bild von:NSImage to NSData, dann to UIImage

[NSKeyedArchiver archivedDataWithRootObject:self.someImage] 

Dann hat ich diese plist-Datei für iOS-App als Vorlage verwenden, aber hier kann ich die Datei nicht auf UIImage und weder zu NSImage konvertieren (da dies nur für OSX).

Ich erhalte diese Fehlermeldung:

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

Bitte machen Sie mir einen Weg, die oben auszuführen.

Antwort

16

OS X:
Statt NSKeyedArchiver der Verwendung eines NSImage-NSData verwenden NSImage ‚s TIFFRepresentation Methode zu konvertieren:

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

iOS:
Lesen Sie die Bilddaten aus der Datei, dann wandeln Sie es in ein UIImage mit UIImage +imageWithData: Convenience-Konstruktor um:

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

Ich denke, Sie wollen 'TIFFrepresentation' hier –

+0

Hoppla , korrigiert. Vielen Dank! –

3

Sie benötigen einen NSBitmapImageRep zu erstellen und dann das Speichern, dann lesen die NSData-UIImage mit +[UIImage imageWithData:]:

Zuerst in OS X, die Daten speichern:

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

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

Sie auch imageRepWithData: verwenden könnte, wenn Sie haben NSData des Bildes bereits - das obige wird es von einer Datei laden (wie Sie also mit NSImage tun können).

dann in iOS:

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

Siehe here für die anderen erlaubt Schlüssel für das Wörterbuch in representationUsingType:properties:.

+1

UIImagePNGRepresentation() verwendet, in dem obigen Code falsch wird: Die Funktion zum Umwandeln einer UIImage-Instanz in gemeint ein NSData-Objekt, nicht zum Umwandeln von NSData in einen UIImage. Siehe: https://developer.apple.com/library/ios/documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIImagePNGRepresentation –

-1

Sie können eine NSImage in NSData konvertieren mit dem Apple API-in gebaut wie folgt:

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

Sie konvertieren UIImage hier (d. H. IOS) nicht NSUmage (d. H. OS X) –