0

그래서 내가 어떤 사용자 정의 클래스와 배열이 객체 각 사용자 정의 클래스에서)NSKeyedArchiver 저장하지 않을 또는로드는

내가는 인코딩을 세터 최대 디코딩했습니다

-(void)encodeWithCoder:(NSCoder *)aCoder{ 
    [aCoder encodeObject:[self _gameNaam] forKey:@"_gameNaam"]; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    if (!(self = [super init])) 
     return nil; 
    [self set_gameNaam:[aDecoder decodeObjectForKey:@"_gameNaam"]]; 

    return self; 
} 

을 그리고 첫 번째보기 컨트롤러에서 나는 로딩을 handeling 및 저장하고있다. 그러나 디코더는 항상 배열이없는 null을 반환합니다. 그래서 그 안에는 아무것도 없습니다. 여기 내 코드는 다음과 같습니다.

- (void) saveToFile{ 
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *bestand = [path stringByAppendingPathComponent:@"data.kets"]; 

    if ([NSKeyedArchiver archiveRootObject:[self dobbelArray] toFile:bestand]) 
     NSLog(@"Did it!!"); 
} 

- (void) loadFromFile{ 

    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *bestand = [path stringByAppendingPathComponent:@"data.kets"]; 

    if ([[NSFileManager defaultManager] fileExistsAtPath:bestand]){ 
     if ([NSKeyedUnarchiver unarchiveObjectWithFile:bestand]) 
      NSLog(@"Did it!!"); 
    } 
} 

-(void)encodeWithCoder:(NSCoder *)aCoder{ 
    [aCoder encodeObject:[self dobbelArray] forKey:@"dobbelArray"]; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    if (!(self = [super initWithCoder:aDecoder])) 
     return nil; 

    [self setDobbelArray:[aDecoder decodeObjectForKey:@"dobbelArray"]]; 

    return self; 
} 

내가 뭘 잘못하고 있는지 잘 모르십니까? 로드는 - (void)viewDidLoad FirstViewController에서 호출됩니다. 내 배열 [NSMutableArray new]; 후. 저장은 내 addViewController에서 UnwindSegue로 돌아갈 때 수행됩니다.

아이디어가 있으십니까? 친절 감사

답변

1

unarchiveObjectWithFile:

당신이 사용하기 위해 아카이브되지 않은 개체를 반환합니다. 지금은 당신이 단지 그것이 (당신이 if 진술과 함께) nil인지 확인한 다음 파괴됩니다 (ARC를 사용한다고 가정 할 때 사용하지 않기 때문에 할당이 해제됩니다).

따라서 unarchiveObjectWithFile:에 의해 반환 된 개체를 가져 와서 속성으로 설정하십시오.

당신이보기 컨트롤러에서 NSCoding으로 무엇을 하려는지 확실하지 않지만 찾고있는 것을 잘 수행하지 못할 수 있습니다.

+0

오, 그래, unarchiver에서 개체를 설정하는 데 필요한 .. 그리고 NSCoding 내 사용자 정의 클래스에 무엇입니까? 아니면 이걸 사용해야합니까? – Kets

+0

일반적으로 NIB/스토리 보드에서보기 컨트롤러를로드하므로 사용자 정의 데이터없이 아카이브되지 않습니다. 'loadFromFile'에서와 같이 컨트롤러가 생성/처음 사용될 때 '파일'로부터 데이터를로드해야합니다. – Wain