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文件解析

IOS 使用 AppDelegate.m 中 ViewController.m 的方法?

Cordova iOS:在 AppDelegate.m 中添加方法调用

AppDelegate.m 的“application:didFinishLaunchingWithOptions”的默认实现是不是从 iOS 6 更改为 iOS 8?

仅为 AppDelegate.m iOS 中的首次启动设置特定方向

未修改的 AppDelegate.m 中的编译错误