2010-02-16 4 views
8

La mia app prevede che un utente possa trascinare elementi specifici come slider del volume e viste UIImage. Il mio obiettivo è essere in grado di salvare le posizioni degli oggetti in modo che l'utente non possa dover trascinare di nuovo gli elementi dopo il riavvio. Sfortunatamente, ho visto errori lungo il percorso "salva CGRect rect = item.frame su " o "NSKeyedArchiver". Qualche altro suggerimento?NSKeyedArchiver/NSuserDefaults - salvataggio di CGRect

risposta

11

Se si utilizza l'archiviazione con chiave su iPhone, UIKit supporta in modo specifico un'aggiunta simile a questa: -encodeCGRect:forKey: e fa esattamente ciò che si desidera. Consulta i documenti Apple per NSCoder's UIKit additions.

Se stai usando NSUserDefaults, non si ottiene il lusso di usare un encoder esplicita per CGRects, ma come dicono alcune altre risposte, si potrebbe risparmiare loro come stringhe utilizzando NSStringFromCGRect() e il suo contrario.

0

Si sarebbe probabilmente codificare CGRect utilizzando NSData e quindi memorizzare NSData oggetto utilizzando NSUserDefaults o NSKeyedArchiver.

Non sono sicuro di quali errori si riferiscono esattamente alla domanda, forse sono necessarie ulteriori spiegazioni?

-4

Devi convertire i float in CGRect in NSNumbers e inserirli in un dizionario.

Se è necessario memorizzare molti CGRects, è consigliabile creare una classe leggera con gli elementi CGRect come attributi NSNumber archiviabili. Crea un inizializzatore che accetta un CGRect. Quindi scrivi rapidamente i metodi del protocollo NSCoder in modo che l'intero oggetto possa essere archiviato

In questo modo è possibile convertire, archiviare e recuperare i CGRect in modo facile e veloce.

+4

Un commento con i controlli in basso sarebbe bello. Se non altro, mi fa capire perché mi sbaglio. Ho preso l'approccio che il 'CGRect' ha bisogno di essere memorizzato come numeri in modo che possano essere manipolati come numeri. Se è necessario gestire attivamente un ampio set di 'CGRect's, una classe wrapper risparmia molto tempo e fatica a lungo termine. – TechZen

16

È possibile utilizzare NSStringFromgCGRect() e CGRectFromString() per memorizzarli.