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 个字节,但官方并未提及。所以我担心使用223字节作为长度来解析文件“dates.dat”会导致以后出现问题。

您是否有任何想法将 dates.dat 读入 NSArray 以便我可以继续其值?

提前致谢

4

1 回答 1

1

不要将日期作为任意数据块存储在文件中(因为您是正确的,您不应该依赖每个日期使用的字节数)。

作为最低要求,使用分隔符(如回车),以便您知道哪些数据属于每个不同的日期。然后,您需要在尝试取消归档之前解析文件并仅读取适当的数据。

于 2014-03-26T11:10:54.040 回答