React Native集成FB SDK遇报错:缺少方法声明上下文
解决@end之后代码报错的问题
Hey there, let's work through this issue step by step!
首先,你遇到的报错本质是Objective-C的基础语法问题——你在类的作用域之外(也就是@end之后)声明/实现了方法,这完全不符合Objective-C的语法规则,所以编译器直接报错了。和Facebook SDK本身关系不大,只是你刚好在跟着他们的文档操作时触发了这个问题。
具体解决步骤:
- 定位错误位置:打开报错的文件
/Users/Jean/dev/mysuperapp/ios/mysuperapp/AppDelegate.m,跳转到第82行,你会发现这里的代码写在了AppDelegate类的@end之后(也就是整个类的实现代码块结束之后)。 - 调整代码位置:把所有属于
AppDelegate的方法、代码都移到@implementation AppDelegate和对应的@end之间。举个正确的示例:@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 这里放Facebook SDK的初始化代码,比如: [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } // 所有和Facebook相关的回调方法,比如下面这个,都要放在@end之前 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; return handled; } @end // 这是AppDelegate实现的结束,之后绝对不能再写类的方法或属性 - 检查复制粘贴的代码:你可能是在复制Facebook文档里的代码片段时,不小心把内容粘贴到了类的范围之外。仔细核对文档里的代码说明,确认它要求你把代码加到哪个方法或代码块内部。
额外提示:
如果之后还有类似的语法报错,先优先检查Objective-C的基础语法规范——类的所有实现代码必须包裹在@implementation和@end之间,分类的代码包裹在@implementation 类名(分类名)和@end之间,这样就能避免大部分这类作用域错误。
内容的提问来源于stack exchange,提问作者prisonier
相关产品推荐
相关产品推荐

