2012-05-18 16 views
10

Ok quindi questo è l'errore che sto ricevendo'NSInternalInconsistencyException', la ragione: "Pippo" non è una sottoclasse di NSManagedObject

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

Suppongo che cosa vuol dire è che 'Place' non è stato aggiunto come entità al modello di dati di base ??? Ma ha come mostrato dall'immagine qui sotto.

Suppongo che la mia ipotesi non sia corretta, quindi qualsiasi aiuto o idea sarebbe bello.

Sono abbastanza certo che questa è la linea che è la causa:

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

'context' è valido quando si esegue tale riga? (Non nulla, ha una connessione con il coordinatore del negozio persistente ....) –

risposta

23

Se non si utilizza classi personalizzate (nessun posto [HM].), Come sembra come non lo sei, controllare la scheda Entity, e assicurarsi che il Classe nome è vuoto (= NSManagedObject) - non Luogo.

+0

Campione! Non ricordo di averlo toccato. Cosa l'avrebbe fatto cambiare? – user1135469

+0

La mia ipotesi è che una sottoclasse per l'entità sia effettivamente l'impostazione predefinita. – paulmelnikow

+0

Grazie @noa :) mi hai salvato il tempo .. – Rupesh

-1

L'altro modo per risolvere questo problema è utilizzare effettivamente la sottoclasse NSManagedObject (consigliata).

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

Fare posto a una sottoclasse di NSManagedObject richiederebbe un approccio diverso da questo. La modifica del tipo di variabile non influirà sulla classe dell'oggetto. – paulmelnikow

+0

No, non lo farebbe. Come è stato sottolineato, è il default e quindi raccomandato. Ad esempio, è molto più sicuro utilizzando nomi di attributi espliciti rispetto all'accesso di attributi tramite la codifica del valore-chiave. – Mundi

12

Ho avuto lo stesso problema con le classi chiamate Messaggio e Connessione. L'errore è apparso solo dopo aver aggiunto una funzione di emailing usando la libreria MessageUI. Credo che il conflitto si verifichi perché la libreria avrà classi denominate Message and Connection, quindi non sono viste come sottoclassi di NSManagedObject. Cambiare i loro nomi con il prefisso (nel mio caso con una X) rende le entità uniche. Intendo prefisso a tutte le mie entità in futuro in modo che ci siano meno possibilità che il conflitto sorga.

+1

Doh, buona scoperta. Aveva un'entità chiamata Messaggio che stava lanciando questo fatale. –

+0

Ho avuto letteralmente lo stesso identico problema, con una classe chiamata "Connessione". Prefisso il nome ha funzionato alla grande, grazie. –

0

La prima cosa da fare quando si verifica questo tipo di errori è quello di verificare il nome della classe del soggetto:

  • Aprire XCDataModel
  • Seleziona l'entità
  • Aprire il pannello di destra Utilities
  • Fare clic sul pulsante "mostra il modello di ispezione dati"
  • Verificare il nome della classe in modo che sia sincronizzato con il modello generato

Spero che questo aiuti!

Problemi correlati