プログラムの実行時にいつでも取得できるように、変更された 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 がエンコードされる場所、アーカイバが終了する場所、および機能するかどうかを確認する場所でブレークポイントを使用してみました。デバッグはそれほど明確ではありませんでしたが、正直なところ、この種のエラーを見つけるには何を探すべきかわかりません. この問題を解決するために他に何ができますか? 考えられる解決策は何ですか?