그래서 내가 어떤 사용자 정의 클래스와 배열이 객체 각 사용자 정의 클래스에서)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
로 돌아갈 때 수행됩니다.
아이디어가 있으십니까? 친절 감사
오, 그래, unarchiver에서 개체를 설정하는 데 필요한 .. 그리고 NSCoding 내 사용자 정의 클래스에 무엇입니까? 아니면 이걸 사용해야합니까? – Kets
일반적으로 NIB/스토리 보드에서보기 컨트롤러를로드하므로 사용자 정의 데이터없이 아카이브되지 않습니다. 'loadFromFile'에서와 같이 컨트롤러가 생성/처음 사용될 때 '파일'로부터 데이터를로드해야합니다. – Wain