Domanda

Sto cercando di aggiungere Core Data per un'applicazione esistente, che non è facile considerando che tutta la documentazione ed ogni esercitazione inizia con la creazione di un app che utilizza i dati di base fin dall'inizio. Così sto cercando di convertire un classe del modello esistente per essere un'entità di dati di base. Ecco quello che ho fatto:

  1. Aggiungi il quadro dei dati di base.
  2. Aggiungi un file xcdatamodel. Mi ha mostrato una finestra di dialogo in cui potrei aggiungere una classe esistente, così ho aggiunto il mio modello. Poi ho ottimizzato gli attributi e detto che ciò che i tipi fossero.
  3. Invece di generare una nuova classe del modello (dal momento che ho già uno) ho creato un progetto di test per vedere che cosa sarebbe simile, e adattato la mia classe per abbinare. Ciò ha incluso cambiarla ereditare da NSManagedObject, cambiare le mie proprietà a dinamico, eliminando le chiamate di rilascio, ecc.
  4. Aggiunta I dati di base si oppone alla mia app delegato, seguendo questo esempio.
  5. Nel mio ViewController, dove ho usato per alloc il mio modello, ho cambiato in

    MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
    

Si noti che delegato è un riferimento alla mia app delegato, ha dichiarato in precedenza. Forse questo non è il modo intelligente per farlo.

Dopo aver impostato tutte le proprietà, ho:

    [[delegate managedObjectContext] save:&error];

Questa linea va in crash, e un backtrace dice che è [NSSqlLiteConnection execute] all'interno, circa 8 livelli all'interno della funzione di risparmio energetico. L'eccezione è:

*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*

Che cosa è questo valore concreto? E perché si chiama questo essere, da chi? Se è importante, il mio modello di creazione / salvataggio codice è all'interno di una funzione che è un callback per un NSNotification. È che su un thread separato? Ho sentito che il managedObjectContext non è thread-safe. Ma io non sto ottenendo lo stesso errore mi aspetterei in quel caso.

È stato utile?

Soluzione

Bene, sono abbastanza sicuro di avere una proprietà dichiarata come NSString sul modello di database (.xcdatamodel) che viene dichiarato come qualcosa di diverso (un NSNumber forse) sul modello a oggetti. Quando si compila il codice, nessun avviso vengono generati ma quando CoreData cerca di salvare la moc (vale a dire: la scrittura dei dati sulla memoria permanente, AKA il database SQLite)., Viene a mancare quando CoreData cerca di convertire il vostro presunto NSString alla codifica UTF-8

Si dovrebbe poi controllare le proprietà sia sul modello di modello di database e l'oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top