2009-12-24 15 views
18

Qual è il modo migliore per aggiungere metodi personalizzati alle mie classi di dati principali?Aggiunta di metodi personalizzati alle classi di dati principali

Ad esempio, supponiamo di avere un'entità "Persona" con proprietà "firstname" e "lastname". Vorrei aggiungere un metodo "fullname", che restituisce una concatenazione delle proprietà firstname e lastname.

Potrei aggiungere il metodo ai file .h e .m generati, ma questo sarebbe difficile da mantenere durante lo sviluppo quando le mie entità potrebbero ancora cambiare. Ricreare il file .h e .m sovrascriverà queste modifiche. Un'altra idea è quella di sottoclasse la classe generata e di aggiungere i metodi lì.

C'è un modo migliore?

risposta

0

Si crea la propria sottoclasse di NSManagedObject per le entità.

meglio spiegato nel NSManagedObject documentation

+0

Sto utilizzando un file .xcdatamodel, che genera per me le classi Oggetto gestito. La mia domanda riguarda l'ulteriore personalizzazione di questa classe generata (che è già una sottoclasse di NSManagedObject) con metodi personalizzati, come l'esempio nel mio post originale. Grazie! – chris

+0

Guarda il tuo modellatore dati. in alto a sinistra elenca le entità. Elenca anche la classe su cui è basata, che per impostazione predefinita è NSManagedObject. È possibile cambiarlo con il nome della propria sottoclasse NSManagedObjectS. – Abizern

+0

Devo essere frainteso qualcosa. Se creo una sottoclasse NSManagedObject e la utilizzo come base per le mie classi generate, allora ho questa gerarchia: NSManagedObject :: Person :: PersonMO. La classe PersonMO contiene i miei attributi e la classe Person contiene i miei metodi. Tuttavia, gli attributi PersonMO non sono visibili ai metodi Person. – chris

38

Trovo che il modo migliore per aggiungere metodi personalizzati che non sono direttamente legati a proprietà dei dati è quello di utilizzare una categoria. Questo in genere funziona meglio se crei le entità Core Data come sottoclassi di NSManagedObject nel modellatore dati, ma può funzionare anche senza. In questo modo tutto il codice generato dalla macchina può rimanere nei file .h e .m principali e tutto il tuo codice personalizzato va in .h e .m per la tua categoria in quella classe.

+12

+1. Usando le categorie, puoi soffiare via e ricostruire l'intestazione e l'implementazione dell'entità generata da Xcode mentre modifichi il modello, mantenendo i tuoi metodi personalizzati intatti e sicuri. –

1

Si consiglia di aggiungere questi metodi alla sottoclasse NSManagedObject personalizzata. Se sei preoccupato di mantenere gli accessor mentre il tuo modello di dati cambia, pur preservando i tuoi metodi personalizzati, ti suggerisco di cercare "Wolf" di Rentzsch mogenerator. Molte persone giurano su questo strumento proprio per questo scopo.

+3

mogenerator aggiunge semplicemente la complessità del progetto e ti allontana dallo stack CoreData attuale. Le categorie sono un modo davvero elegante per farlo se non si fa affidamento su un gruppo di variabili di istanza, ecc. –

+2

A parte la complessità che @BenLachman ha menzionato, non è un grande progetto. I metodi nelle sottoclassi 'NSManagedObject' dovrebbero riguardare direttamente la persistenza del modello da e verso CoreData. Non dovrebbero essere i dati di formattazione per il livello di presentazione. – memmons

Problemi correlati