2012-06-10 104 views
2

因此,我試圖將從UIImagePickerController獲取的圖像保存到NSUserDefaults中,以便在我生成的相冊中打開它,但是當我調用委託方法來保存圖片時,出現錯誤:將UIImage保存爲NSUserDefaults

[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<UIImage: 0x1d0bf0>' of class 'UIImage'. Note that dictionaries and arrays in property lists must also contain only property values.` 

的代碼如下:

self.savedPic = [[UIImage alloc] init]; 
self.savedPic = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
[[NSUserDefaults standardUserDefaults] setValue:self.savedPic forKey:[NSString stringWithFormat:@"image_%i",imageCount]]; 
+1

http://stackoverflow.com/questions/6648518/save-images-in-nsuserdefaults –

回答

1

你應該保存到磁盤上的圖像,並放在你的NSUserDefaults的圖像的名稱,然後在需要時創建它:

[UIImage imageNamed:@"nameOfImage.png"] 
+0

確定。我像這樣保存圖像'UIImageWriteToSavedPhotosAlbum(self.savedPic,self,@selector(savedPic_:didFinishSavingWithError:contextInfo :),nil); '我如何獲取它被保存的名稱? – Chris

+0

imageNamed方法將在應用程序的主包中查找圖像。在我看來,如果您希望用戶擁有並使用相機膠捲,並且您再次需要相機膠捲,則用戶必須從相機膠捲中再次選擇相機膠捲,但如果您的應用需要使用它,則應該複製它在你的應用程序主包中(也許當你完成它的工作後,將它複製到相機膠捲中)。 – moxy

2

這是很簡單的,看看我的代碼:

- (UIImage *)backgroundImage { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData* myEncodedImageData = [defaults objectForKey:@"backgroundImageData"]; 
UIImage* image = [UIImage imageWithData:myEncodedImageData]; 
return image; 
} 

- (void)setBackgroundImage:(UIImage *)image { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData* imageData = UIImagePNGRepresentation(image); 
[defaults setObject:imageData forKey:@"backgroundImageData"]; 
[defaults synchronize]; 
}