switch iphone ios uicolor uiswitch uiappearance

iphone - switch - uislider



¿UISwitch setThumbTintColor causó bloqueo(solo iOS 6)? (3)

Por ahora, voy con esta respuesta de Bill:

// SomeClass.m @interface SomeClass () // ... @property (weak, nonatomic) IBOutlet UISwitch *thumbControl; @property (strong, nonatomic) UIColor *thumbControlThumbTintColor; // ... @end @implementation SomeClass // ... - (void)viewDidLoad { // ... self.thumbControl.thumbTintColor = self.thumbControlThumbTintColor = [UIColor colorWithRed:0.2 green:0.0 blue:0.0 alpha:1.0]; // ... } // ... @end

ACTUALIZACIÓN: Recibí un correo de Apple que dice que el error / problema se ha solucionado ahora y que la próxima versión del SDK no tendrá este problema. ¡Paz!

Tengo esto en el código para mi AppDelegate:

- (void) customizeAppearance { [[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:0 green:175.0/255.0 blue:176.0/255.0 alpha:1.0]]; [[UISwitch appearance] setTintColor:[UIColor colorWithRed:255.0f/255.0f green:255.0f/255.0f blue:255.0f/255.0f alpha:1.000f]]; [[UISwitch appearance] setThumbTintColor:[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.0]]; }

A la que luego llamo desde - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Yo también uso ARC. En iOS 6 mi aplicación sigue fallando. Activé NSZombie y sigue diciendo: *** -[UIDeviceRGBColor release]: message sent to deallocated instance 0x9658eb0

Y ahora me he dado cuenta de un flujo perfectamente reproducible para lo anterior. Cuando comento solo la línea setThumbTintColor dentro de personalizarAppearance, entonces todo funciona bien como debería. Cuando uso la línea setThumbTintColor en su lugar, la aplicación falla exactamente de la misma manera cada vez.

¿Es este un problema conocido para cualquier persona con UISwitch / setThumbTintColor / UIColor? ¿Qué otra cosa podría ser la causa si no el color del interruptor?


También estaba haciendo raywenderlich.com/21703/user-interface-customization-in-ios-6 tutorial y tuve el mismo problema. (¿No estoy seguro de por qué no experimenta esto, ya que tanto mi mano que escribió el código como el código de la solución tienen el mismo problema para mí?)

La primera sesión se realizaría bien, pero después de retroceder, la serie siguiente fallaría.

Después de establecer un punto de interrupción de excepción global, pude ver thumbColorTint en la pila de llamadas cuando se generó la excepción. Hice una conjetura que el objeto fue lanzado demasiado pronto. Para corregirlo, creé una propiedad en mi delegado de la aplicación ... (no es necesario que lo haga en el delegado de la aplicación solo el objeto en el que está configurando el aspecto UISwitch, que en mi caso era el delegado de la aplicación)

@interface SurfsUpAppDelegate() @property (strong, nonatomic) UIColor *thumbTintColor; @end

Luego lo configuro como tal

[self setThumbTintColor:[UIColor colorWithRed:0.211 green:0.550 blue:1.000 alpha:1.000]]; [[UISwitch appearance] setThumbTintColor:[self thumbTintColor]];

Y ahora todo funciona como se espera, ya que el objeto no se lanza antes. Probablemente esto sea un defecto y el objeto se libere aunque todavía sea necesario. UISwitch parece tener un defecto para la API :(


También me encontré con este error con la liberación excesiva de UISwitch de Apple. Tengo una solución similar, pero creo que es un poco más agradable porque no requiere la adición de una propiedad extraña:

UIColor *thumbTintColor = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:alpha]]; //we''re calling retain even though we''re in ARC, // but the compiler doesn''t know that [thumbTintColor performSelector:NSSelectorFromString(@"retain")]; //generates warning, but OK [[UISwitch appearance] setThumbTintColor:[self thumbTintColor]];

En el lado negativo, crea una advertencia del compilador, pero entonces, realmente hay un error aquí, ¡no el nuestro!