4

我有一个在 iOS 上运行的 react-native 应用程序。在 iOS 9.2 上,无论是使用 Chrome 调试器还是不使用它,该应用程序都运行得非常好。但是,在 iOS 8.1 中,将加载应用程序,并且可以滑动列表,从服务器加载数据等。这在模拟器和物理设备上都经过测试,适用于两种操作系统。

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

我的猜测(根据这个 stackoverflow 问题得出)是时间问题,前提是我假设 iOS 8.1 比 iOS 9.2 运行得更快是正确的。我猜调试器会减慢应用程序的速度,以至于计时问题不会出现。话虽如此,我在模拟器中尝试了“慢动画”模式,但在不使用调试器时它仍然崩溃。

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

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

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

4

1 回答 1

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 大概获得了对 toLocaleTimeString 的支持sim也是。报告运行调试的错误要具体得多,并指出了修复方法。

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

于 2017-01-18T22:29:39.270 回答