iOS 7 只有应用程序在启动时崩溃

Posted

技术标签:

【中文标题】iOS 7 只有应用程序在启动时崩溃【英文标题】:iOS 7 Only App Crashes at Startup 【发布时间】:2013-09-28 21:12:43 【问题描述】:

我最近将我的 xcode 项目更改为仅 ios 7,而不是支持 iOS 5。 在应用程序启动后立即进行此更改后,我会在控制台中收到此消息。

-[UICachedDeviceWhiteColor shadowColor]: unrecognized selector sent to instance 0x156f22f0

我不确定是什么原因造成的。但是使用调试器似乎我的应用程序委托在第一行代码处崩溃了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

self.window.rootViewController = self.tabBarController; //this line is where it crashes

[self.window makeKeyAndVisible];

任何帮助将不胜感激

【问题讨论】:

什么是堆栈跟踪。选项卡控制器在加载它的视图/NIB 时会做什么?默认选项卡中有什么? 【参考方案1】:

您可能做了我所做的,并且过分热心地删除和替换了 UITextAttributeTextShadowColor 和 UITextAttributeTextShadowOffset 的编译器警告。所以你的代码看起来像这样:

NSDictionary *titleAttributes = @UITextAttributeTextColor: [UIColor whiteColor],
                                  UITextAttributeTextShadowColor: [UIColor blackColor],
                                  UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                  UITextAttributeFont: [UIFont titleBolder];
[[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];

并将它们都替换为 NSShadowAttributeName,最后得到如下代码:

NSDictionary *titleAttributes = @NSForegroundColorAttributeName: [UIColor whiteColor],
                                  NSShadowAttributeName: [UIColor blackColor],
                                  NSShadowAttributeName: [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                  NSFontAttributeName: [UIFont titleBolder];
[[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];

你需要做的是拥有一个属性 NSShadowAttributeName,并创建一个包含阴影颜色和阴影偏移的 NSShadow 实例。

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor blackColor];
shadow.shadowOffset = CGSizeMake(1, 0);
NSDictionary *titleAttributes = @NSForegroundColorAttributeName: [UIColor whiteColor],
                                  NSShadowAttributeName: shadow,
                                  NSFontAttributeName: [UIFont titleBolder];
[[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];

【讨论】:

这听起来不错。您能否添加一些示例代码,如果它无法正常工作,则明天将您的答案标记为正确。 哈,你问的也不多……我给你塞一些 谢谢,你大概为我节省了半个小时。控制台中的错误非常神秘。 半小时,就这样吗?顺便说一句,[NSShadow.alloc init] 是关于您的编辑的正确语法。 酷哥们.. 谢谢你的回答.. 节省了一个小时... :)【参考方案2】:

这个问题是由于赋予不同的 NSAttributedString.key 和 value 给属性化的 String。

错误: 让前缀属性 = [ NSForegroundColorAttributeName:UIFont(名称:“HelveticaNeue-Light”,大小:11.0), NSFontAttributeName: UIColor.darkGray]

已解决: 让前缀属性 = [ NSFontAttributeName:UIFont(名称:“HelveticaNeue-Light”,大小:11.0), NSForegroundColorAttributeName: UIColor.darkGray]

我已将 colorarrtibute 与字体互换,反之亦然

【讨论】:

以上是关于iOS 7 只有应用程序在启动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助:“错误的架构”导致应用在 iOS 7 中启动时崩溃,但在 iOS 8 中运行良好

Sencha touch/cordova 应用程序在 ios8 启动时随机崩溃

我的 xamarin 表单 iOS 应用程序的发布版本在应用程序启动时崩溃

Tomcat 7 崩溃后无法启动

从应用商店更新后,iOS 应用在启动时崩溃

iOS 应用程序在启动时崩溃