Escribo código Objective-C y con frecuencia me he dado cuenta de que tengo que usar una variable de clase para almacenar un valor para usar una vez. Después de consumirlo ya no lo necesito. Para mí, almacenar este valor en una variable de clase parece ser un olor a código. Realmente el valor debe pasarse como un parámetro a los métodos que estoy usando.¿Cómo se eliminan las variables de clase de uso único del código Objective-C?
Me encuentro con esto por lo general cuando estoy consumiendo delegados. Como ejemplo, tengo una IU con múltiples botones utilizados para cargar y mostrar un UIActionSheet
cuando se tocan. Esta hoja de acción contiene un selector de fecha que establece un valor para UILabel
cuando se descarta la hoja de acción.
- (IBAction)setPurchaseDateTapped {
self.activeField = purchaseDate;
[self loadDatePickerActionSheet:@"Edit Purchase Date"];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
self.activeField.text = value_from_UIActionSheet;
}
Como se puede ver aquí, la devolución de llamada actionSheet clickedButtonAtIndex no me permite pasar el activeField
por lo que tienen que utilizar una variable de clase. Parece más correcto escribir esto:
- (void)actionSheet:(UIActionSheet *)actionSheet parameterValue:(id)parameter {
parameter.text = value_from_UIActionSheet;
}
Creo que puedo subclase el delegado UIActionSheet y UIActionSheet y añadir las firmas que requiero, pero de nuevo esto parece más esfuerzo que vale la pena (?).
Así que mi pregunta es ¿cuál es la mejor manera de hacer lo que estoy tratando de hacer?
No necesariamente quiero cambiar la interfaz del selector de fecha/hoja de acción que he creado (aunque si hay un mejor patrón para configurar múltiples fechas en un UIView mientras mantiene DatePicker fuera del camino, me ' . m todo oídos)
No tenía conocimiento de la propiedad de etiquetas. Tendré que investigar esto. –