2011-10-01 8 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にも使用されるカスタムクラスのUserInfoすることはできません - (ID)initWithCoder:(NSCoder *)デコーダとuserInfo.categoryImageはUIImage変数です。

理由: - だから私は保存することができますどのように私を助けるとnsusedefaultsを使用してuiimageを取得してください

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"]; 
} 

'[UIImage encodeWithCoder::]認識されていないセレクタはインスタンス0x7676a70に送信された' ???

+0

saveCustomObjectは、指定されたすべてのオブジェクトを同じキーに格納するため、ほとんど機能しません。 – Davyd

答えて

21

UIImageを使用してNSStringのようなファイル名を保存しますNSCodingプロトコルを実装していないため、エラーが発生しています。

ストア:

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

復元:NSUserDefaultsの

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

上記のコードでstoreを使用するにはどうすればよいですか? –

+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 standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"image"]; 

画像がNSUserDefaultsに取得:

NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"]; 
    UIImage* image = [UIImage imageWithData:imageData]; 
関連する問題