我正在尝试将更改的 NSDate(开始日期的上午 8 点)保存在数据库中,以便在程序运行时随时检索。我正在使用对象归档。我以为我有正确的代码,但我似乎无法保存它。我没有收到任何错误,只是我在代码中输入的输出。我知道日期和时间是正确的,因为它们在 NSLog 中被视为输出。这是我的代码:
__dataArea = [NSMutableData data];
__unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:__dataArea];
__archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:__dataArea];
__iDates = [[BCimportantDates alloc] initWithCoder:[NSKeyedUnarchiver unarchiveObjectWithFile: @"firstDate.arch"]];
if ((__iDates.firstDate == nil)){
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
NSLog(@"the date %@",date);
[components setHour: 3];
[components setMinute: 00];
[components setSecond: 00];
__newDate = [gregorian dateFromComponents: components];
[__iDates setFirstDate: __newDate];
NSLog(@"%@",__iDates.firstDate);
[__iDates encodeWithCoder: __archiver];
[__archiver finishEncoding];
if ([__dataArea writeToFile:@"firstDate.arch" atomically:YES] == NO){
NSLog(@"archiving failed. ");
}
}
这是 BCimportantDates.m 中编码器和解码器功能的实现:
- (void) encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject: __firstDate forKey: kfirstDateKey];
}
- (id) initWithCoder: (NSCoder *) decoder{
if (self = [super init]) {
self.firstDate = [decoder decodeObjectForKey:kfirstDateKey];
}
return self;
}
我尝试过使用断点,其中 __iDates 被编码,存档器在哪里完成,以及我在哪里检查它是否有效。调试并没有那么明显,但老实说,在发现这种错误时,我不确定要寻找什么。我还能做些什么来解决这个问题?有哪些可能的解决方案?