2012-05-18 11 views
10

Ok, so ist dies der Fehler ich‚NSInternalInconsistencyException‘, Grund: „Foo“ ist keine Unterklasse von NSManagedObject

immer bin
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.' 

Ich gehe davon aus, dass, was es heißt, dass ‚Platz‘ nicht gewesen dem Kerndatenmodell als Entität hinzugefügt ??? Aber es hat wie auf dem Bild unten gezeigt.

Ich vermute, dass meine Annahme falsch ist, wäre allerdings so dass jede Hilfe oder Ideen schön.

Ich bin mir ziemlich sicher, dass dies die Linie ist, dass es verursacht:

NSManagedObject* place = [NSEntityDescription 
           insertNewObjectForEntityForName:@"Place" 
           inManagedObjectContext:context]; 
+0

Ist 'context' gültig, wenn Sie diese Zeile ausführen? (Non-Nil, hat eine Verbindung zu den Persistent Store Coordinator ....) –

Antwort

23

Wenn Sie keine benutzerdefinierten Klassen verwenden (kein Platz [hm].), Wie es sich anhört wie Sie nicht, überprüfen Sie die Entity Registerkarte sind, und stellen Sie sicher, dass die Klasse Name (= NSManagedObject) leer ist - nicht Platz.

+0

Champion! Ich erinnere mich nicht daran, das zu berühren. Was hätte es dazu gebracht, sich zu verändern? – user1135469

+0

Meine Vermutung ist, dass eine Unterklasse für die Entität tatsächlich der Standardwert ist. – paulmelnikow

+0

Dank @noa :) u me Zeit gerettet .. – Rupesh

-1

Der andere Weg, um dieses Problem zu beheben, ist in der Tat die NSManagedObject Unterklasse zu verwenden (empfohlen).

Place *place = [NSEntityDescription 
          insertNewObjectForEntityForName:@"Place" 
          inManagedObjectContext:context]; 
+0

Das Platzieren einer Unterklasse von NSManagedObject erfordert einen anderen Ansatz als diesen. Das Ändern des Typs der Variablen wirkt sich nicht auf die Klasse des Objekts aus. – paulmelnikow

+0

Nein, würde es nicht. Wie bereits erwähnt, ist es die Standardeinstellung und daher empfehlenswert. Es ist beispielsweise viel sicherer, explizite Attributnamen zu verwenden als auf Attribute über Schlüsselwertcodierung zuzugreifen. – Mundi

12

Ich hatte das gleiche Problem mit den Klassen namens Nachricht und Verbindung. Der Fehler ist erst aufgetreten, nachdem eine E-Mail-Funktion mit der MessageUI-Bibliothek hinzugefügt wurde. Ich glaube, der Konflikt tritt auf, weil die Bibliothek Klassen namens Message und Connection haben wird, daher werden sie nicht als Unterklassen von NSManagedObject angesehen. Ändern Sie ihre Namen durch Voranstellen (in meinem Fall mit einem X) macht die Entitäten einzigartig. Ich beabsichtige, alle meine Entitäten in Zukunft so zu präfigurieren, dass die Chance für einen Konflikt geringer wird.

+1

Doh, guter Fund. Hatte eine Entität namens Nachricht, die dieses fatale warf. –

+0

Ich hatte buchstäblich genau das gleiche Problem, mit einer Klasse namens "Connection". Die Vorsilbe funktionierte großartig, danke. –

0

Das erste, was zu tun ist, wenn Sie diese Art von Fehler auftreten ist der Klassenname des Unternehmens zu überprüfen:

  • öffnen XCDataModel
  • Ihr Unternehmen Dienstprogramme
  • Öffnen Sie den rechten Bereich auswählen
  • Klicken Sie auf die Schaltfläche "Datenmodell-Inspektor anzeigen"
  • Überprüfen Sie den Klassennamen, damit er mit dem generierten Modell übereinstimmt

hoffe, das hilft!

Verwandte Themen