0

私のアプリは、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];
}
4

0 に答える 0