2010-02-16 15 views
8

Mi aplicación implica que un usuario puede arrastrar elementos específicos, como controles deslizantes de volumen y vistas de UIImage. Mi objetivo es poder guardar las ubicaciones de los elementos para que el usuario no tenga que arrastrar los elementos nuevamente después del relanzamiento. Lamentablemente, he visto errores a lo largo de la ruta 'CGRect rect = item.frame guardando NSuserDefaults o NSKeyedArchiver'. ¿Cualquier otra sugerencia?NSKeyedArchiver/NSuserDefaults - guardar un CGRect

Respuesta

11

Si está utilizando el archivado por clave en iPhone, UIKit es compatible específicamente con una adición que se ve así: -encodeCGRect:forKey: y hace exactamente lo que desea. Consulte los documentos de Apple para NSCoder's UIKit additions.

Si usa NSUserDefaults, no puede darse el lujo de utilizar un codificador explícito para CGRects, pero como algunas otras respuestas dicen, puede guardarlos como cadenas usando NSStringFromCGRect() y su reverso.

0

Es probable que codificar utilizando CGRectNSData y luego almacenar NSData objeto utilizando NSUserDefaults o NSKeyedArchiver.

No estoy seguro de a qué errores se refiere exactamente en su pregunta, tal vez se necesita más explicación.

-4

Debe convertir los flotantes en el CGRect a NSNumbers y luego ponerlos en un Dictionary.

Si necesita almacenar una gran cantidad de CGRects, recomiendo crear una clase ligera con los elementos CGRect como atributos NSNumber archivables. Crea un inicializador que tome un CGRect. A continuación, escriba los métodos de protocolo de NSCoder rápidos para que todo el objeto se pueda archivar

De esta forma puede convertir, almacenar y recuperar los CGRects de manera rápida y sencilla.

+4

Un comentario con los controles descendentes sería bueno. Si nada más, me deja saber por qué estoy equivocado. Tomé el enfoque de que el 'CGRect' necesita almacenarse como números para que puedan manipularse como números. Si necesita administrar activamente un conjunto grande de 'CGRect's, una clase contenedora ahorra mucho tiempo y esfuerzo en el largo plazo. – TechZen

16

Puede usar NSStringFromgCGRect() y CGRectFromString() para almacenarlos.

Cuestiones relacionadas