Xcode - 读取包含NSDate对象的文件

时间:2014-03-26 11:07:38

标签: nsdate data-storage nskeyedarchiver nskeyedunarchiver

每次触发事件时,我的应用都会记录其日期:

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以便我可以继续其价值观?

提前致谢

1 个答案:

答案 0 :(得分:1)

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

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