私のアプリは、Web サービスから日付文字列を取得し、それをコア データ データベースに解析します。Web サービスは、次の形式の日付を返します。
1900-01-01T00:00:00
文字列を取得し、NSDateFormatter を使用してそれを NSDate に変換してから、フィールドが NSDate 型であるデータベースに貼り付けます。しかし、次のように値を設定すると:
- (void)setValue:(id)value forKey:(NSString *)key forManagedObject:(NSManagedObject *)managedObject {
if ([key isEqualToString:@"createdAt"] || [key isEqualToString:@"updatedAt"]) {
NSDate *date = [self dateUsingStringFromAPI:value];
[managedObject setValue:date forKey:key];
NSLog(@"the formatted date is %@", date);
} else {
[managedObject setValue:value forKey:key];
}
}
NSDate *date = [自己日付...]; NSDate *dateにマウスを合わせると、行に無効なポインターが表示されます。そして、値が設定された後、次の行の managedObject setValue... に到達すると、日付表示変数は両方のインスタンスで NSDate ではありません。そして、フォーマットされた日付の NSLog は次を返します。
フォーマットされた日付は次のとおりです。
1900-01-01 00:00:00 +0000
MesaSQlite でデータベースを参照すると、日付が次のように表示されるため、値はデータベースに格納されます。
-3187296000
NSDate ではなく無効なポインターと変数を取得するのはなぜですか?
NSDateFormatter メソッドは次のとおりです。
#pragma Date Formatting Methods
- (void)initializeDateFormatter {
if (!self.dateFormatter) {
self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
[self.dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
}
}
- (NSDate *)dateUsingStringFromAPI:(NSString *)dateString {
[self initializeDateFormatter];
NSLog(@"dateString received from API == %@",dateString);
NSLog(@"value sent to setValue:forKey == %@",[self.dateFormatter dateFromString:dateString]);
return [self.dateFormatter dateFromString:dateString];
}