내가 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
라고하면 게리
"문제"에 대해 자세히 설명해 주시겠습니까? 오류가 있습니까? 추락? 아무 것도? –