对象:写入文件链接数据结构

时间:2011-07-06 23:49:59

标签: iphone objective-c nscoding nsset

我正在尝试为iPhone和iPad编写风险应用游戏。 在这一刻,我只开发了三个类: 国家大陆和装载机。 国家有一个名称,一个归属大陆和一组近国家。 然后,大陆有一个名称,以及一组属于它的国家。 Loader创建Country和Continents的实例并将它们链接在一起。 因此,每个国家只有一个实例,每个大陆只有一个实例。 我进行dataStructure共享以节省内存,因为它有意义。 问题是我创建所有国家和大陆的方法不是那么优雅(它是160行代码)所以我想将这些结构保存在文件中并在需要时加载它们。 我为我的“自定义”类实现了NSCoding协议:

 //Country.m
 - (void) encodeWithCoder:(NSCoder*) coder
    {
        [coder encodeObject:name forKey:@"name"];//name is of type NSString*
        [coder encodeObject:continent forKey:@"continent"];//name is of type NSSet*
        [coder encodeObject:nearCountries forKey:@"nearCountries"];//name is of type NSSet*
    }


- (id) initWithCoder:(NSCoder*) coder {
    [self initWithName:[coder decodeObjectForKey:@"name"]]; 
    continent = [coder decodeObjectForKey:@"continent"];
    nearCountries = [coder decodeObjectForKey:@"nearCountries"];    
    return self;
 }

//Continent.h
- (void) encodeWithCoder:(NSCoder*) coder
{
    [coder encodeObject:name forKey:@"name"];
    [coder encodeObject:countries forKey:@"countries"];
}


- (id) initWithCoder:(NSCoder*) coder
{   
    [self initWithName:[coder decodeObjectForKey:@"name"]];
    countries = [coder decodeObjectForKey:@"countries"];
    return self;
}

然后我创建了一组国家和一组大陆,并使用此方法将它们保存到文件中:

-(void) writeToFile:(NSString*) pathCountry:(NSString*) pathContinent{
    [NSKeyedArchiver archiveRootObject: countries toFile:pathCountry];
    [NSKeyedArchiver archiveRootObject: continents toFile:pathContinent];
}

问题在于,当我尝试运行程序时,从文件中加载它们:

-(id) initWithFiles:(NSString*)pathCountries :(NSString*)pathContinents{
    [super init];
    continents = [NSKeyedUnarchiver unarchiveObjectWithFile:pathContinents];
    countries = [NSKeyedUnarchiver unarchiveObjectWithFile:pathCountries];
    return self;
}

我得到了所有这些,但没有保存“内部”设置... 所以我可以访问一个国家的名称,但不能访问一个国家的近国,我不明白为什么它不起作用! 他们为什么不编码?它们是由Country构成的NSSet的实例,并且都实现了NSCoding ...... 感谢您的耐心等待!

0 个答案:

没有答案