Sto cercando di creare un semplice modello di Core Data simile al seguente:modello e popolano Core Data molti-a-molti con l'attributo
Order(code, customer)
Book(code, title, price)
OrderBook(order_code, book_code, quantity)
Dalla documentazione Core Data vedo che non è possibile modellare una relazione molti-a-molti aggiungendo attributi. Per questo motivo l'ho modellato come il seguente.
dove:
Order
-OrderBook
c'è un rapporto uno-a-molti con una regola di eliminazione Cascade- forma
OrderBook
-Order
c'è un relazione uno-a-uno con una regola di cancellazione Nessuna azione
Lo stesso vale per Book
e OrderBook
.
Prima domanda: Questo modello è valido?
Supponendo che il modello sia ok, ho creato le sottoclassi NSManagedObject
corrispondenti.
Book.h/.m
Order.h/.m
OrderBook.h/.m
Ciò detto, hanno la necessità di popolare il db corrispondente mediante meccanismo Core Data. Per fare questo ho creato le categorie corrispondenti come la seguente, dove ogni categoria è responsabile di creare se stessa (per mantenere l'incapsulamento dell'oggetto).
Book+Creation.h/.m
Order+Creation.h/.m
OrderBook+Creation.h/.m
Per esempio Book+Creation
categoria ha un metodo di classe come il seguente:
+ (Book *)bookWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
ora ho un problema e non so come risolverlo.
La popolazione modello deve avvenire in momenti diversi. La tabella per i libri viene popolata per prima (sto creando un catalogo di libri da un file xml). Una volta terminato, sono in grado di popolare tabelle di ordini e ordini. Per popolare queste tabelle che sto utilizzando un file XML come la seguente:
<orders>
<order>
<code>1234</code>
<book>2567</book>
<customer>299</customer>
<quantity>4</quantity>
</order>
</orders>
Per creare un oggetto gestito Order
ho creato il seguente metodo nella sua categoria Order+Creation
:
+ (Order *)orderWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
Una volta creato, l'oggetto viene passato al OrderBook+Creation
categoria metodo di classe per creare un oggetto OrderBook
gestito:
+ (OrderBook *)orderWithXMLElement:(GDataXMLElement *)xmlElement withOrder:(Order*)order inManagedObjectContext:(NSManagedObjectContext *)context
{
OrderBook* orderBook = [NSEntityDescription insertNewObjectForEntityForName:@"OrderBook" inManagedObjectContext:context];
orderBook.order = order;
//orderBook.book = <-- how can I retrieve the book?
return orderBook;
}
Ciò che manca è come creare (o recuperare) l'oggetto Book
per assegnarlo all'oggetto OrderBook
.
Seconda domanda: Come posso recuperare un oggetto Book
e assegnarlo a OrderBook
? Devo creare un NSFetchRequest
per recuperare l'oggetto giusto Book
(quello che ha lo stesso codice nel file xml, ad esempio <book>2567</book>
)? In tal caso, esiste un meccanismo per migliorare le prestazioni per l'acquisizione di rquest?
Ricordare che la tabella del libro è già popolata.
Spero sia chiaro. Grazie in anticipo.
Mi dispiace, ma perché downvote? –
Con il modello corrente, se si dispone di un oggetto di ordine che ha sia un libro che un attributo di ordine, se si elimina il libro o l'ordine, l'oggetto del book degli ordini verrà rimosso. E 'questo quello che vuoi? – jrturton
@jrturton grazie per la vostra risposta. Sì, è quello che voglio. Hai qualche suggerimento? –