所有。 当我在现有的iOS应用程序中使用react native时,我遇到了这个异常。有谁知道如何解决它? 崩溃堆栈如下:
***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [RCTBatchedBridge perfStats]:无法识别的选择器发送到实例0x7fe1195ca680'
***第一次抛出调用堆栈: (0 CoreFoundation 0x000000010f0bff65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010eb39deb objc_exception_throw + 48
2 CoreFoundation 0x000000010f0c858d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010f015f7a ___forwarding___ + 970
4 CoreFoundation 0x000000010f015b28 _CF_forwarding_prep_0 + 120
5 ReactNativeTest 0x000000010e5923ad -[RCTBatchedBridge _mainThreadUpdate:] + 429
6 QuartzCore 0x000000010fee7864 _ZN2CA7Display15DisplayLinkItem8dispatchEv + 50
7 QuartzCore 0x000000010fee772e _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 418
8 CoreFoundation 0x000000010f020364 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
9 CoreFoundation 0x000000010f01ff11 __CFRunLoopDoTimer + 1089
10 CoreFoundation 0x000000010efe18b1 __CFRunLoopRun + 1937
11 CoreFoundation 0x000000010efe0e98 CFRunLoopRunSpecific + 488
12 GraphicsServices 0x0000000113aeead2 GSEventRunModal + 161
13 UIKit 0x0000000110007676 UIApplicationMain + 171
14 ReactNativeTest 0x000000010e55615f main + 111
15 libdyld.dylib 0x00000001122e692d start + 1
16 ??? 0x0000000000000001 0x0 + 1
) libc ++ abi.dylib:以NSException类型的未捕获异常终止
答案 0 :(得分:2)
解决方案:构建设置 - >其他链接器标志 - >将“-force_load”标记添加到libReact.a的路径
这次崩溃的原因是perfStats是RCTPerfStats的一个对象,它是RCTBridge的一个类别。
@interface RCTBridge (RCTPerfStats)
@property (nonatomic, strong, readonly) RCTPerfStats *perfStats;
@end
RCTBatchedBridge是RCTBridge的子类。 [RCTBatchedBridge perfStats]调用了在静态库中实现的类别方法。
然而,objective-c链接器使事情稍微复杂化。
“Objective-C没有为方法定义链接符号。链接器符号仅为类定义。 例如,如果main.m包含代码[[FooClass alloc] initWithBar:nil];然后main.o将包含FooClass的未定义符号,但-initWithBar:方法的链接符号不在main.o中。 由于类别是方法的集合,因此使用类别的方法不会生成未定义的符号。这意味着如果已经定义了类本身,则链接器不知道加载定义类别的对象文件。这会导致对于任何未实现的方法都会看到相同的“选择器未识别”运行时异常。“
https://developer.apple.com/library/mac/qa/qa1490/_index.html
但是如果你的项目不允许你采用-ObjC链接器标志,你可以尝试-force_load链接器标志。此标志仅加载指定的库,对其他库影响不大。