每次触发事件时,我的应用都会记录其日期:
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以便我可以继续其价值观?
提前致谢
答案 0 :(得分:1)
不要将日期存储为文件中的任意数据块(因为你是正确的,你不应该依赖于每个日期使用的字节数)。
作为最低要求,请使用分隔符(如回车符),以便了解哪些数据属于每个不同的日期。然后,在尝试取消归档之前,您需要解析文件并仅读入适当的数据。