Обновление: Это работает, если я вызываю archiveRootObject: from applicationDidFinishLaunching :. Если я вызываю его из метода init: метод singleton, он возвращает nil.NSKeyedUnarchiver unarchiveObjectWithFile: возвращает nil в init: метод
Я очень смущен поведением NSKeyedUnarchiver unarchiveObjectWithFile :. The documentation говорит, что он вернет нуль, если файл не существует. С одним из моих объектов, происходит следующее:
Game *g1 = [Game getGame];
NSString *archivePath = [Game getArchivePath];
bool success = [NSKeyedArchiver archiveRootObject:g1 toFile:archivePath];
Game *g2 = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
// success is true, g2 is nil
Я проверил, что файл на самом деле существует и получение записывается в archiveRootObject: метод. Что я делаю неправильно, не позволяя мне вернуть объект игры из архива?
Я сомневаюсь, что это решит ваш вопрос, но в Objective-C правильным термином является 'BOOL' вместо' bool'. – jbrennan
Спасибо за подсказку. Это мой первый проект Objective-C. Я обновил все свои bool's до BOOL. – brantonb
Установите точку останова в objc_exception_throw и проверьте, не возбуждено ли исключение. – peterb