更新:これは、applicationDidFinishLaunching:からarchiveRootObject:を呼び出すと機能します。シングルトンクラスのinit:メソッドから呼び出すと、nilが返されます。NSKeyedUnarchiver unarchiveObjectWithFile:initでnilを返します。
私はNSKeyedUnarchiver unarchiveObjectWithFile:の動作に非常に混乱しています。 The documentationは、ファイルが存在しない場合はnilを返します。私のオブジェクトのいずれかを使用すると、次の処理が行われます。私は、ファイルが実際に存在しないことを確認したとarchiveRootObjectによって書き込まなっている
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
:メソッドを。アーカイブオブジェクトからゲームオブジェクトを取り戻すことができないのは間違っていますか? Game *g2 = [[NSKeyedUnarchiver unarchiveObjectWithFile:archivePath] retain];
あなたg2
NSCoding
に準拠しています:あなたは常に-retain
アーカイブされていないオブジェクトがなければなりません
:それはのためのconviencen方法です。 – jbrennan
チップをありがとう。これは私の最初のObjective-Cプロジェクトです。私はすべてのBOOLをBOOLに更新しました。 – brantonb
objc_exception_throwにブレークポイントを設定し、例外が発生しているかどうかを確認します。 – peterb