2011-09-08 8 views
21

Ho provato a utilizzare le proprietà recuperate un paio di volte, e anche se sembra essere l'approccio giusto, lo non funziona mai.qualcuno ha un esempio funzionante di una proprietà recuperata in core-data?

Nel mio ultimo tentativo ho aggiunto la proprietà fetched alla mia entità, selezionato l'altra entità nel modello come 'destinazione' e impostato il predicato su una condizione che so essere valida.

Problema 1: quando viene generata la classe NSManagedObject per l'entità, non include nulla per la proprietà recuperata. Dopo alcune ricerche ho aggiunto la dichiarazione per esso nel file .h e l'istruzione @dynamic nel file .m (sì, so che è un tipo NSArray *).

Problema 2: anche dopo che, quando accedo a questa proprietà nel codice, ottengo un'eccezione generata che indica qualcosa nell'effetto che la richiesta di recupero non ha un'entità. Suppongo che l''entità' sia quella specificata come 'destinazione' ed è, infatti, lì.

Quindi, mi piacerebbe che qualcuno fornisse un esempio operativo concreto (piattaforma iOS) in cui una proprietà recuperata è definita nel modello, dichiarata in una classe derivata da NSManagedObject e effettivamente utilizzata dal codice.

A questo punto mi sto arrendendo a questa perdita di tempo e semplicemente implementando il codice di richiesta fetch da solo.

+0

avendo lo stesso problema: l'entità è impostato nel modello (e posso vederlo nel file XML 'contents') ma il modello compilato che viene caricato nell'applicazione non ha set di entità di destinazione. Frustrante! –

risposta

2

Avete dato un'occhiata a questa domanda precedente: Xcode 4 Core Data: How to use fetched property created in Data Model editor

leggere attraverso la risposta accettata e tutti i commenti. Sembra che l'abbiano risolto.

+0

Grazie sosborn, ma l'ho già passato - è lì che ho trovato la risposta al problema 1 nel mio post - ma l'utilizzo della proprietà nell'app genera l'eccezione delineata nel Problema 2. –

25

Ecco il mio bit rilevanti di codice (compresi i bit si è già detto):

Il mio esempio ha un oggetto 'Carta' che ha una 1-> molti relazione con un oggetto 'Statistiche'. Ogni oggetto 'Stats' ha un 'risultato' che può essere 1-4. La mia proprietà recuperata è semplice per dare al mio oggetto 'Card' una serie di oggetti 'Stats' che sono di 'risultato' = 1 solo.

Volevo utilizzare la proprietà recuperata in modo da ottenere facilmente gli oggetti "Card" che avevano più di un certo numero e tipo di oggetti "Stats".

Quindi, nell'oggetto "Carta" ho inserito la proprietà recuperata "statsOfTypeOne", con Destinazione impostata su "Statistiche".

nel predicato per questa proprietà inverosimile ho messo

(SELF.outcome=1) AND (SELF.card=$FETCH_SOURCE) 

'sé' è il record 'statistiche', e $ FETCH_SOURCE diventa magicamente l'oggetto 'Carta' quando viene eseguito.

volta che avete fatto, ho messo il seguente nel file .he .m per la 'carta' oggetto:

@property (nonatomic, retain) NSArray *statsOfTypeOne; 
@dynamic statsOfTypeOne; 

Poi nel mio codice che ho usato:

[self.managedObjectContext refreshObject:cardInstance mergeChanges:YES]; 
[cardInstance valueForKey:@"statsOfTypeOne"] 

per ottenere all'array (anche se cardInstance.statsOfTypeOne dovrebbe andare bene). Senza l'oggetto di aggiornamento non stava aggiornando la proprietà Fetched (come da manuale).

I think questo è tutto ciò che ho fatto per farlo funzionare. Fammi sapere se funziona per te.

Peter

4

Aggiunta alla @ risposta di Peter. Ecco come ho ottenuto che funziona a Swift 2.0 e Xcode 7:

import Foundation 
import CoreData 

@objc(Card) 
class Card: NSManagedObject { 

    @NSManaged var statsOfTypeOne: [Stat] 

} 

E poi, a leggere la proprietà inverosimile:

managedObjectContext.refreshObject(someCard, mergeChanges: true) 
// This works and returns [Stat] type 
someCard.statsOfTypeOne 
// So does this 
someCard.valueForkey("statsOfTypeOne") as! [Stat] 
Problemi correlati