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
NSCoder
es el método estándar de Cocoa para implementar la serialización. Ver el Archives and Serializations Programming Guide for Cocoa de Apple para más detalles.
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.
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.
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.
- 1. Diferencia entre initWithNibName e initWithCoder
- 2. ¿Cuándo uso el método initWithCoder?
- 3. ¿Cuándo se llama a initWithCoder?
- 4. initWithCoder: no visible en NSObject?
- 5. Uso de retener en initWithCoder?
- 6. ¿Cuándo utiliza varargs en Java?
- 7. ¿Es necesario llamar a [super encodeWithCoder] cuando se subclasifica un objeto que implementa NSCoding?
- 8. ¿Qué es initWithCoder?
- 9. Objetivo C - ¿Cómo uso el método initWithCoder?
- 10. ¿Cuándo utiliza WCF app.config o web.config?
- 11. ¿Cuándo * no * utiliza Core Data type Transformable?
- 12. ¿Cuándo utiliza StringBuilder.AppendLine/string.Format vs. StringBuilder.AppendFormat?
- 13. Xcode e iOS5.1 en iPhone no funcionarán
- 14. Cuándo utiliza Ver() frente a RedirectToAction
- 15. ¿Cuándo utiliza la expansión de la abrazadera?
- 16. iPhone - ¿Por qué la documentación dice que UIImageView es compatible con NSCoding?
- 17. cuándo liberar un iPhone NSString en
- 18. ¿Cómo identificar cuándo cambió SIM en iPhone?
- 19. Cuándo usar CALayer en Mac/iPhone?
- 20. ¿Cuándo JavaScript devuelve null e indefinido?
- 21. ¿Cómo saber cuándo se ha pausado el MPMoviePlayerController en iPhone?
- 22. Cuándo usar PNG o JPG en el desarrollo de iPhone?
- 23. Cuándo no asignar e iniciar un NSString
- 24. iPhone: ¿Cómo puedo almacenar UIImage usando NSUserDefaults?
- 25. ¿Cuándo utiliza exactamente la palabra clave volátil en Java?
- 26. iPhone: UIButton no utiliza resaltado predeterminado presionado
- 27. ¿Rotar el iPhone e instaurar un nuevo UIViewController?
- 28. Cifrar datos entre C#, ANDROID e IPHONE
- 29. iPhone: Cuándo debería usarse el indicador de actividad de red
- 30. ¿Cuándo/cómo mi aplicación .NET utiliza su archivo App.Config?
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