我的应用程序在iPhone和模拟器上都停留在iOS 9的启动画面上。我可以在iOS 8或更低版本的设备和模拟器上运行它没有问题。我在同一个应用程序上工作的同事有完全相同的问题。
没有任何错误或任何内容,只是挂在启动画面上。如果我在xcode上停止它并尝试直接从手机或模拟器运行它,它将运行没有任何问题。
顺便说一句,我没有看到didFinishLaunchingWithOptions
或willFinishLaunchingWithOptions
被调用!
答案 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 时遇到了同样的问题,它对我有用