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 构建错误