Я пытаюсь написать приложение-игру Risk для iPhone и iPad.На данный момент я разработал только три класса: Country Continent и 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;
}
Я получаю их все, но без сохранения "внутреннего" набора ... Таким образом, я могу получить доступна название страны, но не на ближайшие страны страны, я не могу понять, почему это не работает!Почему они не закодированы?это были экземпляры NSSet, сделанные из Country, и оба реализуют NSCoding ... Спасибо за ваше терпение!