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

Posted

技术标签:

【中文标题】React Native iOS 8.1 应用程序在访问新视图时崩溃 - 仅在不使用调试器时【英文标题】:React Native iOS 8.1 app crashes when accessing a new view - ONLY when NOT using debugger 【发布时间】:2016-06-05 21:06:05 【问题描述】:

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

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

我的猜测(来自this *** question)是时间问题,前提是我假设 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(并且只有发布版本)之外,一切都运行完美,可能是因为它比我测试过的其他设备运行得更快...您找到解决问题的方法了吗? 不幸的是还没有。我暂时把这个问题积压了。如果有新发现会更新。 【参考方案1】:

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

在我们的例子中,我们发现只有当浏览器获得对 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 导致执行路径不同。希望这可以帮助其他人解决这个问题。

【讨论】:

以上是关于React Native iOS 8.1 应用程序在访问新视图时崩溃 - 仅在不使用调试器时的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native 创建本地推送通知 - IOS

使用 lottie-react-native (2.6.1) 时,React native expo 应用程序在 android 上崩溃,但适用于 ios

react-native-pdf iOS 和 Android 构建错误

React-native:如何从 Windows 构建 ios

react-native ios访问网络 需要啥权限

从 react-native 创建 Android 和 iOS 应用