1

イベントがトリガーされるたびに、私のアプリはその日付を記録します。

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = [path stringByAppendingPathComponent:@"dates.dat"];

if (![[NSFileManager defaultManager] fileExistsAtPath:filename]) {
    [[NSFileManager defaultManager] createFileAtPath:filename
                                            contents:nil
                                          attributes:nil];
}

NSFileHandle *wHandle = [NSFileHandle fileHandleForWritingAtPath:filename];
[wHandle seekToEndOfFile];

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:[NSDate date]];

[wHandle writeData:data];

[wHandle closeFile];

イベントの日付を記録することに成功しました。しかし今、それらを読み返すのに苦労しています。これを試しましたが、アプリがクラッシュします:

NSData *restore = [NSData dataWithContentsOfFile:filename];
NSArray *date1 = [NSKeyedUnarchiver unarchiveObjectWithData:restore]; // crash here!

NSDate の書き込みごとに 223 バイトかかることに気付きましたが、公式には言及されていません。したがって、ファイル「dates.dat」を解析するために長さとして 223 バイトを使用すると、後で問題が発生するのではないかと心配しています。

値を処理できるように、dates.dat を NSArray に読み込むアイデアはありますか?

前もって感謝します

4

1 に答える 1

1

日付をデータの任意のブロックとしてファイルに保存しないでください (あなたが正しいので、各日付に使用されるバイト数に頼るべきではありません)。

少なくとも区切り文字 (キャリッジ リターンなど) を使用して、どのデータがそれぞれの日付に属しているかがわかるようにします。次に、アーカイブを解除する前に、ファイルを解析して適切なデータのみを読み込む必要があります。

于 2014-03-26T11:10:54.040 に答える