Inkompatible Zeigertypen, die 'NSManagedObject Subclass *' von 'NSEntityDescription *' zuweisen

Ich speichere den Kontext für verwaltete Objekte und verwende Folgendes:

trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];

Es funktioniert, alles scheint großartig, aber ich bekomme die Warnung:

Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'

VitTrainingDay is an NSManagedObject Subclass of the Core Data entity TrainingDay. trainingDayObject is an instance of VitTrainingDay

Ich habe versucht, die Dokumente auf NSEntityDescription zu lesen, aber da ich eine Entity zuweise, bin ich verwirrt, was das Problem ist.

Ich bin ziemlich neu bei Core-Daten und Objective-C, also vergib mir, wenn das wirklich offensichtlich ist. Es beschäftigt mich jetzt seit ein paar Tagen.

0

1 Antworten

Wenn Sie dies tun:

[NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];

Was Sie erhalten, ist eine Instanz von NSEntityDescription . Dies ist ein Objekt, das dem Entitätstyp entspricht, den Sie im Core Data Modelleditor in Xcode konfiguriert haben. Es repräsentiert eine Entität type , keine Instanz dieser Entität.

Aus der Fehlermeldung wird angezeigt, dass trainingDayObject als VitTrainingDay * deklariert ist. Dies ist ein Zeiger auf eine Instanz eines verwalteten Objekts.

Der Unterschied hier ist genau die gleiche Idee wie der Unterschied zwischen einer Klasse und einer Instanz einer Klasse. Es ist, als ob Sie versuchen, die Klasse NSString einer Instanz zuzuweisen, die eine bestimmte Instanz einer Zeichenfolge sein soll.

Was Sie eigentlich wollen, ist etwas wie

trainingDayObject = [NSEntityDescription insertNewObjectForEntityForName:@"trainingDay" inManagedObjectContext:self.context];

Weil diese Methode eine neue Instanz des Entitätstyps erstellt, anstatt Ihnen nur das Entitätstypobjekt selbst zu geben.

0
hinzugefügt
Wenn ich insertNewObjectForEntityForName benutze, erzeuge ich leere Objekte und speichere die MOC von den anderen erstellten Objekten. Zum Beispiel bekomme ich in meiner Tabellenansicht nil, nil, Name 1, Name 2 statt des erwarteten Namens1, Name 2.
hinzugefügt der Autor Arel, Quelle
Ich dachte, es wäre ein einfacheres Problem und wollte die Frage nicht allzu kompliziert machen. Hier ist meine andere Frage mit Kontext: stackoverflow.com/questions/20589938/…
hinzugefügt der Autor Arel, Quelle
Stellen Sie dann eine andere Frage, die mehr Details zu Ihrer Arbeit enthält. Zum Beispiel, was Sie versuchen, wenn Sie die Codezeile in Ihrer Frage oben verwenden. Mit nur einer Zeile ist es unmöglich, eine Antwort zu geben, die den Kontext der Gesamtstruktur Ihrer App widerspiegelt. Was möglich ist, was ich getan habe, ist zu erklären, was mit dieser einen Zeile falsch ist.
hinzugefügt der Autor Tom Harrington, Quelle