0

Task内にオブジェクト(カスタムクラス)を格納しているアプリがありNSMutableArrayます。Taskクラスはとプロトコルに準拠しておりNSCoding、とメソッドNSCopyingも実装しました。encodeWithCoderinitWithCoder

ユーザーがに新しいタスクを追加するとき、を使用NSMutableArray listして配列を保存しNSKeyedArchiverます。listを設定しますUITableView

データは保存されており、アプリを終了して再入力しても、データはまだそこにあります。別のアプリをしばらく使って戻ってきても、データは残っています。ただし、マルチタスクタスクでアプリを「強制終了」すると、デバイスを管理または再起動すると、データが消えます。重要なコードスニペットは次のとおりです。

#define kFilename @"epapsTasksFile"

- (NSString *)dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:kFilename];
}

- (void)viewDidLoad {

    NSString *filePath = [self dataFilePath];
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        self.list = [[NSKeyedUnarchiver unarchiveObjectWithFile:kFilename] retain];
    }
    else {
        self.list = [NSMutableArray arrayWithCapacity:1];
    }

    ...
}

- (void)applicationWillResignActive:(NSNotification *)notification {
    NSMutableArray *updatedList = [[NSMutableArray alloc] initWithArray:self.list];
    [NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];
}

アプリが「強制終了」されたとき、またはデバイスが再起動されたときに、アプリがデータを保存しないのはなぜですか?また、iPhoneシミュレーターを再起動しても、データはそのまま残っていることに注意してください。

4

1 に答える 1

1

終了時にデータを保存するには、デリゲート メソッドでもデータ
を保存する必要があります。[NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];applicationWillTerminate

編集: applicationWillTerminate IOS4.0 以降では保証されません。

の返却ステータスを確認しarchiveRootObject:toFile:、データが適切に保存されているかどうかを確認することをお勧めします。ご想像のとおり、ファイル パスが間違っている可能性があります。

于 2011-06-13T21:54:40.700 に答える