Domanda

Mi piace la capacità di serializzazione di plist per piccole raccolte di oggetti: è semplice, l'archiviazione è XML, ecc. Ma trovo ingombranti i valori di impostazione nei dizionari:

[myDict setObject:keepThis forKey:@"ivar"];

Preferirei di gran lunga usare oggetti derivati ??da classi (o anche solo strutture):

myObj.ivar = keepThis

... e quindi inviare un messaggio a una raccolta per ottenere una notifica. Le classi / strutture utilizzate a questo scopo potrebbero essere limitate in modo da mappare direttamente e facilmente la pianificazione di primitivi; per esempio myObj potrebbe essere mappato su un NSDictionary e un requisito potrebbe essere posto su ivar in modo tale che siano uno dei primitivi di plist.

Qualcuno ha già costruito una struttura per questo, o dovrei farlo io?

È stato utile?

Soluzione 5

Ho visto questo postato altrove, ma è esattamente quello che stavo cercando. Le risposte sopra indicano gli ingredienti grezzi, ma eccolo qui, tutto sommato: http: // retaincount.com/blog/?p=7

Altri suggerimenti

Non sono sicuro che si tratti proprio di questo, ma Key Value Coding ti permetterà, tra le altre cose, di ottieni un dizionario con valori dai dati di un'istanza e anche imposta i dati di istanza da un dizionario .

C'è anche un modo per chiedi a un'istanza un elenco dei suoi attributi , anche se si scopre che devi scrivere un po 'di codice per farlo funzionare. (Tuttavia, potresti utilizzare introspezione di runtime per implementarlo, se lo desideri.) MODIFICA 2 gennaio 2011: - [NSObject AttributeKeys] non appare più nella documentazione di iOS. Ho modificato il collegamento per fare riferimento alla documentazione del Mac, ma tieni presente che questa potrebbe essere solo un'opzione su quella piattaforma.

(Il Il protocollo NSCoding è un altro modo per consentire ai tuoi oggetti di archiviarsi / ripristinarsi, ma l'archiviazione è binaria, non XML, e sei ancora responsabile per ottenere / mettere ogni valore che ti interessa quando ti viene chiesto dal sistema per farlo.)

Potresti voler dare un'occhiata a questa domanda SO che discute di mettere gli ivar di un'istanza in un dizionario in fase di runtime.

Un progetto interessante. La Guida alla programmazione di Objective-C 2.0 ha una sezione sulle funzioni di runtime per ottenere in modo dinamico un elenco delle proprietà di una classe:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

Con questo, dovrebbe essere abbastanza facile scrivere una categoria su NSObject con un metodo che ottiene l'elenco delle proprietà e le inserisce in un dizionario.

Per utilizzare le proprietà per questo, è necessario disporre di un set predefinito di possibili chiavi. Non puoi usare nomi arbitrari con la sintassi punto & # 8212; doveva essere una proprietà nota o un accessore del primo operando. Quindi non può esserci una forma generica di questo. Ma se ne crei uno tuo, trasformarlo in un dizionario è semplice come fare [self dizionariWithValuesForKeys: listOfProperties] .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top