Я пытаюсь сохранить некоторые пользовательские классы/данные в файл в приложении iPhone/iPad.Сохранить собственный класс с NSCoder
У меня есть класс RSHighscoreList
@interface RSHighscoreList : NSObject {
NSMutableArray *list;
}
, который содержит объекты RSHighscore в списке
@interface RSHighscore : NSObject {
NSString *playerName;
NSInteger points;
}
Когда я пытаюсь сохранить все в файл
- (void)writeDataStore {
RSDataStore *tmpStore = [[RSDataStore alloc] init];
_tmpStore.highscorelist = self.highscorelist.list;
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:tmpStore forKey:kDataKey];
[archiver finishEncoding];
[data writeToFile:[self dataFilePath] atomically:YES];
[archiver release];
[data release];
}
@interface RSDataStore : NSObject <NSCoding, NSCopying> {
NSMutableArray *highscorelist;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:highscorelist forKey:@"Highscorelist"];
}
приложение будет врезаться с сообщением об ошибке
-[RSHighscore encodeWithCoder:]: unrecognized selector sent to instance 0x573cc20 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RSHighscore encodeWithCoder:]: unrecognized selector sent to instance 0x573cc20'
Интересно, почему ошибка говорит о RSHighscore, даже если это «завернуто». У кого-нибудь есть хорошая идея?
Можете ли вы показать нам свою реализацию encodeWithCoder для HighScoreList. – deanWombourne 2010-11-30 18:33:46
есть в конце. – Stef 2010-11-30 18:38:58
Является ли `RSHighscoreList` используемым в фактическом коде? Это не в образце. Не использовать его не вызовет проблем, но если вы его используете, вам также может понадобиться реализовать NSCoding для `RSHighscoreList`. – outis 2010-11-30 18:49:54