UISwitch setThumbTintColor导致崩溃(仅限iOS 6)?

Bou*_*rne 18 iphone uicolor uiswitch ios uiappearance

更新:从Apple收到一封邮件,说明现在修复了错误/问题,下一个SDK版本不会出现此问题.和平!

我在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]];
 }
Run Code Online (Sandbox Code Playgroud)

然后我打电话来 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

我也用ARC.在iOS 6中,我的应用程序一直在崩溃.我启用了NSZombie,它一直说:*** -[UIDeviceRGBColor release]: message sent to deallocated instance 0x9658eb0

现在我已经意识到上面的一个完全可重复的流程.当我在customizeAppearance中单独注释掉setThumbTintColor行时,一切正常.当我使用setThumbTintColor代替时,应用程序每次都会以完全相同的方式崩溃.

这是UISwitch/setThumbTintColor/UIColor的任何人都知道的问题吗?如果没有开关颜色,还有什么原因?

man*_*van 19

我也在做这个教程并遇到了同样的问题.(不确定为什么你没有遇到这种情况,因为我输入的代码和解决方案代码对我来说都有同样的问题?)

第一个segue会发生,但是在返回后,下一个segue会失败.

设置全局异常断点后,我可以在生成异常时在调用堆栈中看到thumbColorTint.我猜测对象太早发布了.要修复我在我的app委托中创建了一个属性..(你不需要在app委托中只委托你设置UISwitch外观的对象,在我的例子中是appdelegate)

@interface SurfsUpAppDelegate()
@property (strong, nonatomic) UIColor *thumbTintColor;
@end
Run Code Online (Sandbox Code Playgroud)

然后我就这样设置了

[self setThumbTintColor:[UIColor colorWithRed:0.211 green:0.550 blue:1.000 alpha:1.000]];
[[UISwitch appearance] setThumbTintColor:[self thumbTintColor]];
Run Code Online (Sandbox Code Playgroud)

现在一切都按预期工作,因为对象没有及早发布.这可能是一个缺陷,即使仍然需要对象也会被释放.UISwitch似乎有API的缺陷:(