2011-10-01 12 views
6

मैं छवि NSUserDefaults का उपयोग नहीं कर बचाने के लिए और जोआईफोन: मैं NSUserDefaults का उपयोग करके UIImage को कैसे स्टोर कर सकता हूं?

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

इस्तेमाल किया मेरे ऐप और मैं भी इस्तेमाल किया कस्टम वर्ग UserInfo दुर्घटना कर सकते हैं - (आईडी) 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 के रूप में फ़ाइल नाम को बचाने के एनएससीओडिंग प्रोटोकॉल को लागू नहीं करता है, यही कारण है कि आपको त्रुटि है।

स्टोर:

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' क्लास को' एनएससीओडी 'प्रोटोकॉल लागू करें और संपूर्ण' userInfo 'ऑब्जेक्ट को संग्रहित करें। अधिक जानकारी के इस पोस्ट को पढ़ें: उदाहरण के लिए http://stackoverflow.com/questions/3715038/how-to-store-a-nsuinteger-using-nscoding। – Davyd

+0

मुझे एनएससीओडी का भी उपयोग किया जाता है लेकिन ऐप भी क्रैश –

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]; 
संबंधित मुद्दे

 संबंधित मुद्दे