2015-08-17 21 views
20

Ho una classe di modello Objective-C MyType. Questa classe viene utilizzata nel codice Swift:Dati principali: Impossibile trasmettere il valore di tipo "MyType_MyType_2" a MyType

NSEntityDescription.insertNewObjectForEntityForName("MyType", inManagedObjectContext: context) as! MyType 

I as! risultati del cast nel messaggio di errore

Core Data: Could not cast value of type 'MyType_MyType_2' (0x7be99a30) to MyType (0xf33db74). 

Se lancio come NSManagedObject funziona. Quando stampo il risultato, posso comunque vedere, che si tratta di un caso reale di MyType:

<MyType: 0x7ae06d50> (entity: MyType; id: 0x7aeba6d0 <x-coredata:///MyType/t957F2860-85F8-46E0-B6D6-4D1DF6C4EC613> ; data: { 
    ...the fields... 
}) 

Cosa sta succedendo qui? E da dove viene il nome MyType_MyType_2?

+1

Hai aggiunto '@objc (MyType)' prima della dichiarazione della classe MyType? –

+0

No, come ho detto, il modello MyType è già codice Objective-C. – Bastian

+0

Ho lo stesso problema, funziona bene nel progetto e in altri target ma non funziona sul mio target di test. Inoltre funzionava, dopo che un aggiornamento XCode non sapeva quale versione (attualmente in 8.3.2) si è fermata. Non sono in grado di eseguire i miei test a causa di questo crash. Qualche idea su come risolverlo? Il suggerimento dal basso non aiuta :( – Shial

risposta

35

Quando ho avuto questo problema, era perché avevo dimenticato di impostare la "classe" sull'entità. Questo è ciò che mi si avvicinò con:

  1. Fare clic su File .xcdatamodelId nella struttura dei file/progetto riquadro di navigazione (a sinistra).
  2. Selezionare l'entità con cui si hanno problemi.
  3. Nel pannello Utilità (a destra), cercare l'icona che assomiglia ad un telefono cellulare del 1997, l'ispettore del modello di dati.
  4. Sotto le impostazioni dell'entità, dovresti vedere due campi, "Nome" e "Classe" - impostare "Classe" con il nome della classe che stai usando (tipicamente lo stesso di "Nome").

Si noterà anche prima di seguire questi passaggi che la "classe" predefinita è NSObject, che riflette il messaggio di errore. Ho trovato alcuni modi programmatici per fare anche questo, ma questa sembrava la soluzione più semplice/più veloce.

Devo notare che il mio modello è stato scritto in Swift, quindi ho dovuto aggiungere il riferimento all'interoperabilità @objc (Entity) menzionato da @zellb. Ma questo non dovrebbe fare la differenza nella soluzione fintanto che si sta facendo quella parte correttamente (e ciò provocherebbe un errore diverso e non correlato dalla mia comprensione).

+3

Sembra un'icona Tomagotchi però, per l'ispettore Data Model. –

+0

Grazie mille! :) – rihurla

23
  1. insieme di entità Nome classe
  2. Set Modulo "Modulo prodotto corrente" come qui di seguito

enter image description here

+0

Ho iniziato il mio progetto Swift in xCode 7 e le entità che ho creato lì avevano 'Module' specificato come mostrato sopra.Ora in xCode 8 (8A218a) 'Module' è vuoto dopo aver creato una nuova entità. Specificare come sopra lo ha risolto per me. –

3

solo provare questo:

@objc(MyType) 
public class MyType: NSManagedObject { 
    // your class 
} 

invece di questo:

class MyType: NSManagedObject { 
    // your class 
}