2011-10-01 54 views
6

NSUserDefaults的使用我無法保存圖片和崩潰我的應用程序,我還使用自定義類的UserInfo其中使用iPhone:如何使用NSUserDefaults存儲UIImage?

-(void)encodeWithCoder:(NSCoder *)encoder 
{ 
    NSData *imageData = UIImagePNGRepresentation(categoryImage); 
    [encoder encodeObject:categoryName forKey:@"name"]; 
    [encoder encodeObject:imageData forKey:@"image"]; 
} 

- (ID)的initWithCoder:(NSCoder *)解碼器和userInfo.categoryImage是UIImage的變量。

原因: ' - [UIImage的encodeWithCoder:]:無法識別的選擇發送到實例0x7676a70'

userInfo = [[UserInfo alloc] init]; 

userInfo.categoryName = categoryName.text; 
NSLog(@"Category Name:--->%@",userInfo.categoryName); 

userInfo.categoryImage = image; 

appDelegate.categoryData = [[NSMutableDictionary dictionaryWithObjectsAndKeys: 
           userInfo.categoryName, @"name",userInfo.categoryImage,@"image", nil] mutableCopy]; 


[appDelegate.categories addObject:appDelegate.categoryData]; 
NSLog(@"Category Data:--->%@",appDelegate.categories); 

[appDelegate.categories addObject:userInfo.categoryName]; 
[appDelegate.categories addObject:userInfo.categoryImage]; 

[self saveCustomObject:userInfo.categoryName]; 

[self saveCustomObject:userInfo.categoryImage]; 


-(void)saveCustomObject:(UserInfo *)obj 
{ 
    appDelegate.userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj]; 


    [appDelegate.userDefaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"]; 
} 

所以請幫助我,我怎麼可以存儲和使用nsusedefaults檢索的UIImage ???

+0

saveCustomObject幾乎無法工作,因爲它存儲了同一個鍵的每個給定對象。 – Davyd

回答

21

UIImage的文件名保存爲的NSString沒有實現NSCoding協議,這就是爲什麼你有錯誤。

商店:

NSData* imageData = UIImagePNGRepresentation(image); 
NSData* myEncodedImageData = [NSKeyedArchiver archivedDataWithRootObject:imageData]; 
[appDelegate.userDefaults setObject:myEncodedImageData forKey:@"myEncodedImageDataKey"]; 
} 

還原:

NSData* myEncodedImageData = [appDelegate.userDefaults objectForKey:@"myEncodedImageDataKey"]; 
UIImage* image = [UIImage imageWithData:myEncodedImageData]; 
+0

如何在我的上述代碼中使用商店請幫助 –

+0

使'UserInfo'類實現'NSCoding'協議並存檔整個'userInfo'對象。閱讀這篇文章的更多信息:http://stackoverflow.com/questions/3715038/how-to-store-a-nsuinteger-using-nscoding例如。 – Davyd

+0

我也使用NSCoding但也是應用程序崩潰 –

34

如果我是你,我會保存的UIImage到一個文件中(使用[MYIMAGE哈希]生成一個文件名),並使用NSUserDefault ;-)

+9

天啊,請接受這個答案。在NSUserDefaults上保存UIImage實在是一個愚蠢的想法。 – Mugunth

10

圖像存儲NSUserDefaults的上:

 [[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"image"]; 

圖像檢索NSUserDefaults的上:

NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"]; 
    UIImage* image = [UIImage imageWithData:imageData]; 
相關問題