2009-04-30 10 views
8

Como dice mi pregunta en el asunto anterior, ¿qué requisitos debe cumplir normalmente para decir "Ok, necesito encodeWithCoder: y initWithCoder: instanciación para esto"? Por lo general, puede escribir el estado del objeto en NSUserDefaults, entonces tengo curiosidad cuando los expertos deciden usar uno frente al otro?¿Cuándo utiliza encodeWithCoder: e initWithCoder: en el iPhone?

Respuesta

9

Los valores predeterminados del usuario son, básicamente, una lista de propiedades. Las listas de propiedades son similares a JSON y solo pueden almacenar tipos específicos de datos: NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Si intenta almacenar algo más en un usuario predeterminado, obtendrá una excepción. Las listas de propiedades tampoco pueden manejar gráficos de objetos arbitrarios, solo árboles.

Siempre puede tomar su estado personalizado y convertirlo en una estructura de datos compatible con listas de propiedades, luego almacenarlo en los valores predeterminados del usuario; pero básicamente estás implementando un mecanismo de serialización de objetos, y también podrías usar uno más poderoso que ya fue provisto por NSArchiver.

10

initWithCoder: es utilizado por el sistema operativo al archivar archivos XIB; si observa detenidamente, verá que no se llama al initWithFrame: para las vistas que crea en su XIB; en su lugar tendrán initWithCoder: llamado.

+0

Hola Ben, me sale bien sin este método cuando estoy usando XIB. Para las vistas que construyo programáticamente, normalmente estoy bien con solo loadView. Para las vistas que construyo con IB, utilizo viewDidLoad {}. Así que estoy tratando de entender cuándo tiene sentido usar initWithCoder: – Coocoo4Cocoa

1

Voy con NSCoder cada vez que tengo algún tipo de datos complicados para almacenar que nunca tengo que editar a mano. Por ejemplo, mi aplicación Converter almacena las tasas de cambio de moneda descargadas de Internet en un archivo de NSCoder. Sin embargo, eso es lo único que conserva en dicho archivo: las definiciones de unidad, que solo se modifican a mano, se guardan en una serie de archivos plist en el paquete de aplicaciones, y las cosas como las unidades y los valores seleccionados más recientemente se guardan en NSUserDefaults.

Cuestiones relacionadas