2011-10-01 4 views
6

나는 nsuserdefaults를 사용하여 이미지를 저장하고 iPhone : NSUserDefaults를 사용하여 UIImage를 어떻게 저장할 수 있습니까?

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

사용 내 응용 프로그램 및 I 사용할 사용자 정의 클래스 사용자 정보 충돌 할 수 - (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]; 
관련 문제