【问题标题】:App stuck in splash screen on iOS 9 with no error应用程序卡在 iOS 9 的初始屏幕中,没有错误
【发布时间】:2015-12-26 12:51:57
【问题描述】:

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

没有错误或任何东西,只是挂在启动屏幕上。如果我在 xcode 上停止它并尝试直接从手机或模拟器运行它,它会毫无问题地运行。

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

【问题讨论】:

    标签: ios objective-c xcode ios9 xcode7


    【解决方案1】:

    在您的“答案”中包含代码:

    +(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 的建议。

    【讨论】:

      【解决方案2】:

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

      我正在使用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);
      }
      

      【讨论】:

      • 我面临同样的问题,但我无法理解您的回答?而且我没有使用任何标签栏控制器为什么我会遇到这个问题?
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        您必须在所有“有效架构”中指定 arm64。 如果您不指定 arm64 或忘记其中之一,则应用程序将不会启动并停留在启动画面上。

        刚刚验证了这一点。

        这是 Xcode 7 的错误吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 2017-04-17
          • 2017-11-05
          • 2012-11-05
          • 2021-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多