React Native Reanimated v3升级后NSUnknownKeyException崩溃求助
解决RNSScreen不支持screenView键值编码的崩溃问题
问题原因
你遇到的崩溃是版本兼容问题:react-native-reanimated 3.1.0引入的共享过渡逻辑依赖react-native-screens的screenView属性,但你当前使用的react-native-screens@3.13.1版本尚未添加这个属性,导致KVC取值时抛出NSUnknownKeyException。
解决方案
1. 升级react-native-screens到兼容版本
这是最稳妥的方案,将react-native-screens升级到与reanimated 3.1.0兼容的版本(建议升级到^3.20.0及以上,适配RN 0.68.x):
- 使用yarn:
yarn upgrade react-native-screens@^3.20.0 - 使用npm:
npm install react-native-screens@^3.20.0 --save
升级后执行以下步骤确保依赖生效:
- iOS端:进入ios目录执行
pod install --repo-update - 清理项目缓存:
yarn cache clean(或npm cache clean --force) - 重新编译运行项目
2. 临时修改reanimated源码(不推荐,仅应急用)
如果暂时无法升级screens,可以修改react-native-reanimated的原生代码避免崩溃:
找到REASharedTransitionManager.m文件(通常在node_modules/react-native-reanimated/ios目录下),将swizzled_viewDidLayoutSubviews方法中的[self valueForKey:@"screenView"]替换为安全的取值逻辑:
id screenView = nil; if ([self respondsToSelector:NSSelectorFromString(@"screenView")]) { screenView = [self performSelector:NSSelectorFromString(@"screenView")]; }
修改后重新编译项目即可。注意:后续更新reanimated时会覆盖这个修改,所以优先推荐升级screens。
内容的提问来源于stack exchange,提问作者famfamfam
相关产品推荐
相关产品推荐

