2017-03-24 5 views
1

Ich habe eine Routine, die vergleicht, wenn ein Datensatz zuletzt auf einer Website mit dem gleichen Datensatz in CoreData auf einem iPad gespeichert aktualisiert wurde. Hier ist obsLastUpdated ein Feld in CoreData als Typ Date festgelegt.Welches Format ist ein Date in CoreData - Date oder String?

Lesen der Daten aus CoreData in eine NSDate:

NSDate *iPadDate = [[self.recordDetails objectAtIndex:0] obsLastUpdated]; //gets the date from CoreData 

ich diese Warnung:

Inkompatible Zeigertypen 'NSDate *' mit einem Ausdruck des Typs 'NSString *' initialisieren

Es ist nur eine Warnung und alles funktioniert noch. Wenn ich versuche und vergleiche dies NSDate iPadDate mit einem anderen NSDate gibt es keine Fehler und alles funktioniert. Aber ich möchte der Warnung auf den Grund gehen.

Wenn ich von CoreData als Zeichenfolge lesen und in eine NSDate konvertieren, kann ich nicht scheinen, die Formatierung richtig zu bekommen und die App stürzt ab. Ich habe versucht:

NSString *iPadDateStr = [[self.recordDetails objectAtIndex:0] obsLastUpdated]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
NSDate *iPadDate = [dateFormat dateFromString: iPadDateStr]; 

Ich weiß, dass CoreData nicht speichert das Datum als NSDate aber wie genau wird er gespeichert und wie komme ich um die Warnung?

Coredata Entity:

enter image description here

UPDATE:

Der Fehler in der Klasse war, wo obsLastUpdated als NSString erklärt wurde. Geändert zu NSDate und alles ist gut.

+0

zeigen Bitte einen Screenshot des Datenmodells Einheit Kern. – Fogmeister

+0

Dann haben Sie das Kerndatenmodell erstellt, um einen String zu haben. Kein Date. Können Sie einen Screenshot Ihres Kerndatenmodus zeigen? Und schließe den Objektcode mit ein. – Fogmeister

+0

und der Code für die Klasse? Irgendwas stimmt nicht. Zeig uns, was falsch ist. Nicht was richtig ist. :-) Wenn Sie ein Attribut als Datum in den Kerndaten setzen, wird ein NSDate zurückgegeben. Hast du sichergestellt, dass du einen sauberen Build gemacht hast? Haben Sie es kürzlich von String zu Date geändert? – Fogmeister

Antwort

0

einfach definieren es als NSDate, nicht NSString:

MyEntity *entity = [self.recordDetails first]; 

NSDate *iPadDate = entity.obsLastUpdated;