2011-01-18 18 views
5

Ho due entità Libri e Pacchetti. Un libro non può appartenere a nessuno, a uno o più pacchi. Quindi ho una relazione bidirezionale per molti tra queste entità.iPhone - dati principali Relazione NSSet

Sto per impostare il valore di questa relazione nella parte Libro.

Se l'attributo è stato un normale, vorrei semplicemente fare qualcosa di simile

aBook.title = @"this is my title"; 

Se volevo impostare il titolo per un libro. Ma poiché questa è una relazione bidirezionale per molti, i dati di base dicono che è un attributo NSSet.

La mia domanda è: come faccio a impostare e leggere valori da questo attributo?

Prima ho pensato che fosse un normale NSSet. Così, dopo aver letto il prodotto che semplice fatto

NSSet *aSet = Book.fromBundle; 

ma per il mio sgomento aSet conteneva lo zero oggetti

così ho pensato che stavo mettendolo in errore. ho impostato in precedenza facendo

Book.fromBundle = [NSSet setWithObject:aBundle]; 

(sì, tutte le modifiche sono state salvate nel database)

mi sto perdendo qualcosa? Grazie

risposta

1

È un set normale, ma i dati di base sconsigliano di assegnare direttamente un nuovo set (proprio per questo motivo). Se si utilizza una classe personalizzata, l'implementazione standard includerà i metodi addFromBundleObject: e removeFromBundleObject: da utilizzare. Se non si utilizza una classe personalizzata o si sceglie di non implementare questi metodi, è possibile utilizzare il metodo mutableSetValueForKey: per ottenere un set che è possibile modificare.

NSMutableSet *mutableSet = [book mutableSetValueForKey:@"fromBundle"]; 
[mutableSet addObject:aBundle]; 
+0

grazie. L'app non si arresta più, ma dopo aver usato questo comando più volte per aggiungere diversi pacchetti a un libro, il libro memorizza solo l'ultimo. Ho ispezionato il database in un'app esterna perché non ho ancora capito come creare un predicato sulla richiesta da verificare e vedere se l'oggetto bundle si trova suBundle. In una relazione troppo multipla userei [NSPredicate predicateWithFormat: @ "(fromBundle ==% @)", aBundle], ma non ho idea di come farlo su un NSSet ... se puoi aiutare anche con quello, Apprezzo (se non è chiedere troppo) ...: D – SpaceDog

+0

Le relazioni uno-a-molti sono fondamentalmente le stesse delle relazioni molti-a-molti. Entrambi sono rappresentati come NSSets. L'unica differenza è come viene impostata la relazione inversa. Dovresti essere in grado di fare la stessa cosa che faresti per una relazione uno-a-molti. – ughoavgfhw

+0

grazie !!!!!!!!!!!! – SpaceDog

Problemi correlati