访问新视图时,React Native iOS 8.1应用程序崩溃 - 仅在不使用调试器时

时间:2016-02-23 20:30:04

标签: ios debugging react-native ios8.1 ios9.2

我在iOS上运行了一个本机应用程序。在iOS 9.2上,应用程序运行完全正常,无论是在使用Chrome调试器还是不使用它时。但是,在iOS 8.1中,应用程序将加载,并且可以刷新列表,从服务器加载数据等。这在两个操作系统中都经过测试,可在模拟器和物理设备上运行。

棘手的部分是,当使用Chrome调试器运行iOS 8.1时。按预期工作。当它未与Chrome调试器一起运行时,只要导航到新视图,应用程序就会崩溃。我有一个自定义滑动视图,因此我可以滑动到另一个视图,我可以看到所有内容正确加载到“安定”和崩溃之前。如果我只是尝试点击一个新页面,它几乎会立即崩溃。

我的猜测(受this stackoverflow question教育),这是一个时间问题,前提是我的iOS 8.1运行速度比iOS 9.2快的假设是正确的。我猜测调试器会减慢应用程序的速度,以至于计时问题本身并不存在。话虽这么说,我在模拟器中尝试了“慢动画”模式,并且在不使用调试器时它仍然崩溃。

考虑到这一点,我认识到它很可能是一个配置问题。我正在运行XCode 7.2,并且正在使用react-native 0.21.0-rc。

尝试点击任意位置/更改视图时出现的错误是:

null is not an object (evaluating 'inst.componentWillReceiveProps')

1 个答案:

答案 0 :(得分:0)

在发布我们的应用时遇到同样的问题 - 它只会在发布时出现在模拟器中。

在我们的案例中,结果发现我们在代码段中出现错误,只有在浏览器获得对js函数的支持时才会出现错误

Date().toLocaleTimeString

Mozilla表示,您可以通过执行以下操作来检查浏览器对此功能的支持:

function toLocaleTimeStringSupportsLocales() {
  try {
    new Date().toLocaleTimeString('i');
  } catch (e) {
    return e​.name === 'RangeError';
  }
  return false;
}

我还没有更新到最新的Xcode,但它在运行iOS 10的iPhone上崩溃。一旦我将Xcode升级到最新版本,错误也开始出现在模拟器中,因为Safari可能获得了支持对于SIM中的toLocaleTimeString也是如此。报告运行调试的错误更加具体,并指出了修复。

我怀疑这是同一个问题,但这就是我在我的应用程序中修复此错误的方式,以及它如何仅在发布版本中与sim版本一起出现 - 严格因为不同版本的Safari导致不同的执行路径。希望这可以帮助其他人解决这个问题。