2009-11-14 15 views
8

Io sono sicuro circa la corretta definizione delle proprietà transitori:Quando dovrebbero essere incluse le proprietà transitorie in CoreData nel modello a oggetti?

  1. Si può definire le proprietà transitorie nel modello a oggetti e quindi calcolare quando necessario nella classe relativa.
  2. Ma le cose funzionano altrettanto bene se si specifica una classe e si definiscono metodi getter arbitrari per qualsiasi proprietà transitoria senza dichiararla nel modello oggetto (purché l'entità sia collegata a quella classe nel modello).

La mia domanda: qual è il vantaggio di dichiarare le proprietà transitori nel modello a oggetti? Vedo solo uno in basso: ogni volta che aggiungi una proprietà transitoria (ad esempio "FormattedDate") il persistentStore diventa incompatibile.

cosa mi manca?

risposta

6

Dal Core Data Programming Guide:

Se l'attributo non supportato è un oggetto, poi nel modello a oggetti gestito si specificano il tipo di indefinito, e che è transitorio. Quando si implementa la classe personalizzata dell'entità, non è necessario aggiungere una variabile di istanza per l'attributo, è possibile utilizzare l'archivio interno privato dell'oggetto gestito. Un punto da notare sulle implementazioni descritte di seguito è che memorizzano nella cache il valore transitorio. Ciò rende più efficiente l'accesso al valore, è anche necessario per la gestione delle modifiche. Se si definiscono variabili di istanza personalizzate, è necessario pulire queste variabili in didTurnIntoFault anziché dealloc o finalize.

Prendo questo per "convenienza" e "mantenendo tutti gli attributi definiti in un unico punto: il modello a oggetti gestito".

Per quanto riguarda il controllo delle versioni MOM, il Core Data Model Versioning and Data Migration Programming Guide dice: punto di vista di

Core Data sul controllo delle versioni è che è interessato solo a caratteristiche del modello che influenzano la persistenza.

Tuttavia, non chiarisce la sua posizione sulle proprietà transitorie. In effetti il ​​secondo punto elenco che elabora quel paragrafo sembra quasi una contraddizione. Un test rapido (nuovo progetto con una semplice entità "Foo" con un attributo "nome", salva un file con diversi foos, aggiungi una proprietà transitoria, esegui di nuovo, e tutti i foos caricano, aggiungi un nuovo foo, salva, chiudi, riaperta) mostra che le proprietà transitorie non sono considerate dal sistema di controllo delle versioni.

+1

Grazie per il chiarimento. Ho provato anche questo. Ero ovviamente sbagliato: l'aggiunta di proprietà transitori al modello non portava a negozi incompatibili. Sembra anche esserci un argomento per l'efficienza. Non ho tuttavia capito come funziona la cache. Se ho, ad esempio, una proprietà CLLocationCoordinate2D e i metodi getter lo creano semplicemente da due doppi lat/long, in che modo Core-Data memorizzerà il valore risultante? – FelixLam

+0

Non è sicuro, ma potrebbe valere la pena di testare: "Ci sono due strategie sia per ottenere che per impostare il valore transitorio. Puoi recuperare il valore transitorio" lazily "... o durante awakeFromFetch ... Potrebbe essere preferibile recuperarlo pigramente se il valore può essere grande ... Per il valore permanente, è possibile aggiornarlo ogni volta che il valore transitorio viene modificato (... oppure è possibile posticipare l'aggiornamento fino a quando l'oggetto non viene salvato ... "(tagliati per adattarsi) –

Problemi correlati