2010-03-16 3 views
0

내가 NSCoding의 작동 방식을 배우려고 노력하지만 것입니다 내가 시도하고 이전에 보관 된 객체를 unachive 문제가 건너 온 것으로, 이것은 내가decodeObjectForKey를 사용하는 데 문제가 있습니까?

// CREATE EARTH & ADD MOON 
Planet *newPlanet_002 = [[Planet alloc] init]; 
[newPlanet_002 setName:@"Earth"]; 
[newPlanet_002 setType:@"Terrestrial Planet"]; 
[newPlanet_002 setMass:[NSNumber numberWithInt:1]]; 
[newPlanet_002 addMoon:[moonsOfEarth objectAtIndex:0]]; 

// ARCHIVE PLANET OBJECTS (Save) 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:newPlanet_002 forKey:@"EARTH"]; 
[archiver finishEncoding]; 

BOOL success = [data writeToFile:PathName atomically:YES]; 
if(success == YES) NSLog(@"Write: OK"); 
[archiver release]; 
[data release]; 

// UNARCHIVE PLANET EARTH (Load) 
NSData *dataStore = [[NSData alloc] initWithContentsOfFile:PathName]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataStore]; 
[unarchiver finishDecoding]; 

Planet *savedPlanet = [unarchiver decodeObjectForKey:@"EARTH"]; 

문제가 될 것으로 보인다 ... 뭘 오전입니다 위의 마지막 행은 내가 잘못되고 있다고 생각합니다. 내 클래스는

@interface Planet : NSObject <NSCoding> 
{ 
    NSString *name; 
    NSString *type; 
    NSNumber *mass; 
    NSMutableArray *moons; 
} 
@property(retain, nonatomic) NSString *name; 
@property(retain, nonatomic) NSString *type; 
@property(retain, nonatomic) NSNumber *mass; 
@property(retain, nonatomic) NSMutableArray *moons; 

이처럼 내 initWithCoder ...

-(id)initWithCoder:(NSCoder *)aDecoder { 
    NSLog(@"_initWithCoder:"); 
    self = [super init]; 
    if(self) { 
     [self setName:[aDecoder decodeObjectForKey:@"NAME"]]; 
     [self setType:[aDecoder decodeObjectForKey:@"TYPE"]]; 
     [self setMass:[aDecoder decodeObjectForKey:@"MASS"]]; 
     [self setMoons:[aDecoder decodeObjectForKey:@"MOONS"]]; 
    } 
    return self; 
} 

...처럼 어떤 도움이 많이 주시면 감사하겠습니다 보인다. 당신이 finishDecoding라고하면 게리

+1

"문제"에 대해 자세히 설명해 주시겠습니까? 오류가 있습니까? 추락? 아무 것도? –

답변

2

, 당신은 다음 decodeObjectForKey:를 호출 할 수 없습니다. 당신은 분명히 아직 "해독을 마쳤습니다". 완료되면 finishDecoding으로 전화하십시오.

+0

롭, 미안한 어리석은 실수를 해줘서 고맙습니다. 디코딩이 NSData 객체의 실제 설정이었습니다. 그런 다음 객체에 할당합니다. 인코딩을 마치면 엔코딩하고 디스크에 씁니다. . 매우 감사. – fuzzygoat

관련 문제