iOS AppDelegate.m:处理 openUrl RCTLinkingManager 和 Twitter - 方法 'application:openURL:options:' 的重复声明
Posted
技术标签:
【中文标题】iOS AppDelegate.m:处理 openUrl RCTLinkingManager 和 Twitter - 方法 \'application:openURL:options:\' 的重复声明【英文标题】:iOS AppDelegate.m: Handling openUrl RCTLinkingManager and Twitter - Duplicate declaration of method 'application:openURL:options:'iOS AppDelegate.m:处理 openUrl RCTLinkingManager 和 Twitter - 方法 'application:openURL:options:' 的重复声明 【发布时间】:2020-08-22 21:27:57 【问题描述】:我需要将DeepLinking
添加到我的React Native
应用程序中,并且如文档中所述,我需要添加@and
上面的方法。
// Add this above `@end`:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
return [RCTLinkingManager application:application openURL:url options:options];
我已经添加了这种方法,但我也有类似的用于 Twitter 登录的方法。这是我的AppDelegate.m
:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
return [[Twitter sharedInstance] application:app openURL:url options:options];
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
return [RCTLinkingManager application:application openURL:url options:options];
@end
我收到一个错误:
Duplicate declaration of method 'application:openURL:options:'
如何解决?我不是ios开发人员,所以很难弄清楚,但我认为这两种方法应该以某种方式结合起来。
【问题讨论】:
【参考方案1】:正如错误所暗示的,您不能拥有具有相同签名的多个函数。 一个简单的解决方案是将您的实现合并为一个,如下所示:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
return ([[Twitter sharedInstance] application:app openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]);
【讨论】:
我在这些方法之间存在冲突。 Twitter sharedInstance 在每次 RCTLinkingManager 调用时被调用。是否可以使用 if 将它们分开? 这取决于您的需要。您可以按 URL 过滤并仅针对特定 URL 格式调用 Twitter,否则,调用您自己的处理程序。基本上,你有 URL,所以你可以控制应该调用哪个。 如何做到这一点?仅当我使用 Twitter 身份验证时才需要调用 Twitter,而当我使用深度链接时需要调用 RCTLinking。目前,在每个深度链接上都会调用 Twitter 最简单的方法是根据打开的 URL 的主机来决定应该调用哪个处理程序。以上是关于iOS AppDelegate.m:处理 openUrl RCTLinkingManager 和 Twitter - 方法 'application:openURL:options:' 的重复声明的主要内容,如果未能解决你的问题,请参考以下文章
IOS 使用 AppDelegate.m 中 ViewController.m 的方法?
Cordova iOS:在 AppDelegate.m 中添加方法调用
AppDelegate.m 的“application:didFinishLaunchingWithOptions”的默认实现是不是从 iOS 6 更改为 iOS 8?