React Native iOS 8.1应用在访问新视图时崩溃 - 只有在不使用调试器时才会发生。

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')

我在一个React Native应用程序上遇到了非常相似的问题,除了在我的iPhone 6 Plus(仅限发布版本)上运行得比其他设备快之外,一切都完美无缺...你找到解决问题的方法了吗? - Dagobert Renouf
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Josh Baker
1个回答

0

我们的应用程序发布时遇到了同样的问题 - 它不会在模拟器中显示,只会在发布版本中显示。

在我们的情况下,事实证明我们在代码的某个部分中存在错误,只有当浏览器支持js函数时才会触发该错误。

Date().toLocaleTimeString

Mozilla 表示,您可以通过以下方式检查浏览器是否支持此函数:
function toLocaleTimeStringSupportsLocales() {
  try {
    new Date().toLocaleTimeString('i');
  } catch (e) {
    return e​.name === 'RangeError';
  }
  return false;
}

我还没有更新到最新的Xcode,但我的iPhone运行iOS 10时它就崩溃了。一旦我将Xcode升级到最新版本,错误也开始在模拟器中出现,因为Safari显然也在模拟器中获得了toLocaleTimeString的支持。运行调试时报告的错误更加具体,指向了修复方法。

我怀疑这不是同样的问题,但这就是我如何在我的应用程序中解决这个错误,并且它只在发布版本与模拟器中显示--严格因为由于不同版本的Safari导致执行路径不同。希望这能帮助其他遇到此问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接