更新:从苹果收到一封邮件,指出该错误/问题已得到修复,并且下一个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]];
}
然后我从
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
调用我也使用ARC。在iOS 6中,我的应用不断崩溃。我启用了NSZombie,它一直在说:
*** -[UIDeviceRGBColor release]: message sent to deallocated instance 0x9658eb0
现在,我已经实现了上面所述的一种完全可重现的流程。当我在customAppearance内单独注释掉setThumbTintColor行时,则一切正常。当我改用setThumbTintColor行时,应用程序每次都会以完全相同的方式崩溃。
对于使用UISwitch/setThumbTintColor/UIColor的任何人来说,这是一个已知问题吗?如果不是开关颜色,还有什么可能是原因?
最佳答案
我也在做this教程,并且遇到了同样的问题。 (不知道为什么您不会遇到这种情况,因为我的手动输入代码和解决方案代码对我来说都有相同的问题?)
第一次segue会发生,但是回去之后下一次segue会失败。
设置全局异常断点后,生成异常时,我可以在调用堆栈中看到thumbColorTint。我猜测该对象释放得太早了。为了解决这个问题,我在我的应用程序委托(delegate)中创建了一个属性。(您不需要在应用程序委托(delegate)中仅执行设置UISwitch外观的对象,在我的情况下就是appdelegate)
@interface SurfsUpAppDelegate()
@property (strong, nonatomic) UIColor *thumbTintColor;
@end
然后我将其设置为
[self setThumbTintColor:[UIColor colorWithRed:0.211 green:0.550 blue:1.000 alpha:1.000]];
[[UISwitch appearance] setThumbTintColor:[self thumbTintColor]];
现在,一切都按预期进行,因为对象没有提前释放。这可能是一个缺陷,即使仍然需要释放对象。 UISwitch似乎对API有缺陷:(