私はiPhoneアプリを書いています–いくつかのソーシャルネットワークのクライアントです。アプリは複数のアカウントをサポートしています。アカウントに関する情報は、キー付きアーカイブに保存されます。
保存に使用される方法:
- (void) saveAccounts {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"accounts.bin"];
// NSMutableArray *accounts = ...;
[NSKeyedArchiver archiveRootObject:accounts toFile:path];
}
読み取りに使用するメソッド:
- (NSMutableArray *) loadAccounts {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"accounts.bin"];
NSMutableArray *restoredAccounts = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
return [restoredAccounts retain];
}
このメソッドsaveAccounts
は、一部のアカウントが追加/変更/削除された場合にのみ使用されます。このメソッドloadAccounts
は、アプリが起動するたびに使用されます。このファイルにアクセスする他のコードはありません。
私と私のテスターの1人が問題を抱えています。ある瞬間、のように振る舞い始めるのaccounts.bin
が欠けています。loadAccounts
が返された場合nil
、アプリはアカウントの追加を提案します。アカウントを入力した後(アプリは呼び出す必要がありますsaveAccounts
)、アプリは正常に動作しますが、再度起動すると、アカウントを再度追加するように求められます。唯一の解決策は、アプリをiPhoneに再インストールすることです。再インストールした後は、問題が発生してもしばらくは機能します。
私たち(問題が発生した私と私のテスター)は、3.1.2でiPhone3Gを使用しています。3.1.2を搭載したiPhone3GSでこの問題が発生しなかった別のテスター。
このファイルが消える理由はありますか?
アップデート
コードにバグが見つかりました。ドキュメントディレクトリ全体を削除するコードがありました。コードのこの部分はリモートサーバーに関連しているため、このコードを追跡することは困難でした。バグは非常にまれな条件下でのみ発生しました。
これでバグが見つかり、コードが修正されました。wkwの答えは私の問題を解決しませんでしたが、それは私にもっと深く掘り下げることを余儀なくさせました。ありがとうございました!