我努力學習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;
}
任何幫助,將不勝感激。
加里
你能詳細說明「這個問題嗎?」你有錯誤嗎?碰撞?一個零? – 2010-03-16 15:21:31