应用程序卡在iOS 9上的启动画面中,没有错误

时间:2015-09-29 06:38:00

标签: ios objective-c xcode ios9 xcode7

我的应用程序在iPhone和模拟器上都停留在iOS 9的启动画面上。我可以在iOS 8或更低版本的设备和模拟器上运行它没有问题。我在同一个应用程序上工作的同事有完全相同的问题。

没有任何错误或任何内容,只是挂在启动画面上。如果我在xcode上停止它并尝试直接从手机或模拟器运行它,它将运行没有任何问题。

顺便说一句,我没有看到didFinishLaunchingWithOptionswillFinishLaunchingWithOptions被调用!

enter image description here

5 个答案:

答案 0 :(得分:4)

在你的回答"你包括代码:

+(void)initialize
{

   titles = @[NSLocalizedString(@"CODE", nil), NSLocalizedString(@"ERROR", nil), NSLocalizedString(@"TROUBLESHOOTING", nil)];
}

这确实是您问题的根源。在实施+load+initialize时要非常小心。 @bbum对该主题有a great article

第一次触摸类(或类别)时调用

+initialize - 当类初始化时,类加载机制调用+initialize。无法保证在课程加载过程中何时可能发生这种情况,这是您问题的一部分。

在你的情况下,你正在使用NSLocalizedString - 它在引擎盖下可能相当沉重。它具有其他几个类(NSString等)的依赖性,并且可以访问文件系统。正如@bbum在他的文章中指出的那样,这可能会导致严重的麻烦。在你的情况下,这可能是一个令人讨厌的僵局。

将您的titles = @[NSLocalizedString...行移动到对象中更合适的位置,如初始化程序,awakeAfterUsingCoder:等等,您应该立即解决问题。完成此操作后,您应该检查整个代码库中是否有实施+initialize+load的实例,并对其进行审核,以确保这些用法符合@bbum的建议。

答案 1 :(得分:1)

好的,我发现了问题。虽然这听起来很荒谬!!

我正在使用UITabBarController并且在第一个控制器内部我有一个UITableViewController,它有一个自定义的数据源类,可以启动一个硬代码表标题,这些标题已经本地化了!!

+ (void)initialize {
    titles = @[NSLocalizedString(@"CODE", nil), NSLocalizedString(@"ERROR", nil), NSLocalizedString(@"TROUBLESHOOTING", nil)];
}

在我跟踪堆栈后,我意识到进程被卡在那里没有跟踪和错误!我还是不知道为什么!

所以我想出了一个解决方法:

+ (void)initialize {
    titles = @[@"Code",@"Error",@"Troubleshooting"];
}

仅在返回文本时检索本地化值:

- (NSString *)titleAt:(NSInteger)index {
    return NSLocalizedString(titles[index],nil);
}

答案 2 :(得分:0)

好的,我想我找到了答案。

您必须在所有“有效架构”中指定arm64。 如果您没有指定arm64或忘记一个应用程序将无法启动并停留在启动画面上。

刚刚验证了这一点。

这是一个Xcode 7错误吗?

答案 3 :(得分:-1)

我将调试和发布设置为NO 你确定“任何SDK”也有arm64?

答案 4 :(得分:-1)

我在 pod update 之前更新了我的 pod 时遇到了同样的问题,它对我有用