2012-11-05 2 views
0

사용자 지정 클래스에서 저장하는 데 문제가 있습니다. NSUserDefaults에서 코드의 일부 위치에서 오류를 저장하려고했지만 작동하지 않습니다.사용자 지정 클래스에서 NSUserdefaults를 저장할 수 없습니다.

파일 H :

#import <Foundation/Foundation.h> 
@interface Errors : NSObject<NSCoding> 
@property (nonatomic,strong) NSString* type; 
@property (nonatomic,strong) NSString* verNum; 
@property (nonatomic,strong) NSString* title; 
@property (nonatomic,strong) NSString* content; 
@property (nonatomic,strong) NSString* source; 
@property (nonatomic,strong) NSString* userId; 
@property (nonatomic,strong) NSNumber* videoId; 

@end 

M 파일 :

#import "Errors.h" 
@implementation Errors 
@synthesize verNum; 
@synthesize type; 
@synthesize title; 
@synthesize content; 
@synthesize source; 
@synthesize userId; 
@synthesize videoId; 

- (void)encodeWithCoder:(NSCoder *)encoder{ 
    [encoder encodeObject:self.verNum forKey:@"verNum"]; 
    [encoder encodeObject:self.type forKey:@"type"]; 
    [encoder encodeObject:self.title forKey:@"title"]; 
    [encoder encodeObject:self.content forKey:@"content"]; 
    [encoder encodeObject:self.source forKey:@"source"]; 
    [encoder encodeObject:self.userId forKey:@"userId"]; 
    [encoder encodeObject:self.videoId forKey:@"videoId"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder{ 
    self = [super init]; 
    if(self != nil) { 
     self.verNum = [decoder decodeObjectForKey:@"verNum"]; 
     self.type = [decoder decodeObjectForKey:@"type"]; 
     self.title = [decoder decodeObjectForKey:@"title"]; 
     self.content = [decoder decodeObjectForKey:@"content"]; 
     self.source = [decoder decodeObjectForKey:@"source"]; 
     self.userId = [decoder decodeObjectForKey:@"userId"]; 
     self.videoId = [decoder decodeObjectForKey:@"videoId"]; 
    } 
    return self; 
} 
@end 

절약 :

errorsDitalis = [[Errors alloc]init]; 
errorsDitalis.verNum = (NSString *) [[request userInfo] objectForKey:@"verNum"]; 
errorsDitalis.type =(NSString *) [[request userInfo] objectForKey:@"type"]; 
errorsDitalis.title =(NSString *) [[request userInfo] objectForKey:@"title"]; 
errorsDitalis.content =(NSString *) [[request userInfo] objectForKey:@"content"]; 
errorsDitalis.source =(NSString *) [[request userInfo] objectForKey:@"source"]; 
errorsDitalis.userId =(NSString *) [[request userInfo] objectForKey:@"userId"]; 
errorsDitalis.videoId =(NSNumber *) [[request userInfo] objectForKey:@"videoId"]; 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:errorsDitalis forKey:@"ErrorList"]; 
[userDefaults synchronize]; 

로딩 :

Errors * newError = [[Errors alloc]init]; 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
newError = [userDefaults objectForKey:@"ErrorList"]; 

newErrors에 대해 nil을 반환합니다. this 도움을 사용하려고했지만 작동하지 않았습니다. 누군가 아이디어가 있습니까?

+0

http://soulwithmobiletechnology.blogspot.in/2011/08/how-to-save-array-of-custom-class-in.html 이것 좀 봐. –

답변

0

나는 당신이 initWithCoder

0

내가 어떻게해야 생각 호출 할 때 세터를 사용한다고 생각

[self setVerNum:[decoder decodeObjectForKey:@"verNum"]]; 

대신

self.verNum = [decoder decodeObjectForKey:@"verNum"]; 

보십시오 :

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self.errorsDitalis] forKey:@"ErrorList"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

및 하지 :

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:errorsDitalis forKey:@"ErrorList"]; 
[userDefaults synchronize]; 

와 함께로드 :

newError = (Errors *)[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"ErrorList"]]; 
관련 문제