应用程序:openUrl:在iOS9中被多次调用
对于这个问题,我创建了一个具有单个视图的新项目 我设置了一个url方案,并在视图中添加了一个标签 代码在这里应用程序:openUrl:在iOS9中被多次调用,ios,objective-c,ios9,uiapplicationdelegate,openurl,Ios,Objective C,Ios9,Uiapplicationdelegate,Openurl,对于这个问题,我创建了一个具有单个视图的新项目 我设置了一个url方案,并在视图中添加了一个标签 代码在这里 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { ViewController *vc = (ViewController *)self.w
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
ViewController *vc = (ViewController *)self.window.rootViewController;
vc.textLabel.text = [NSString stringWithFormat:@"%@\n%@",vc.textLabel.text,url.absoluteString];
return YES;
}
它很好用
但如果我在应用程序初始化时添加一些耗时的操作,
像这样
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[NSThread sleepForTimeInterval:1];
return YES;
}
然后我通过这些步骤发现了这个问题:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
-(BOOL)应用程序:(UIApplication*)应用程序openURL:(NSURL*)url选项:(NSDictionary*)选项
您可以按home按钮并点击应用程序图标多次,而openUrl将被调用多次,这取决于耗时操作的成本
我在iOS 9.3.3和iOS 9.3.1上进行了测试,发现了同样的问题
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
我在iOS 8.1.2和iOS 10.2上试过,没有发现这个问题
任何想法/建议都会非常有帮助&非常感谢为什么要把事情复杂化,如果你有两行代码,这意味着你不需要检查什么集合什么集合,只需要做一个简单的检查,确保不管调用多少次,你都不会得到两次值?如果你只在9.3.3和9.3.1中发现这个bug,这将解决你的问题,也会让你的应用程序经得起未来的考验,并让你控制代码中发生的事情,正如你所期望的那样。你觉得怎么样?@sleek这个代理可以被多次调用。如果使用相同的url方案,将得到相同的url字符串。但我只使用一次方案,它将调用此委托两次或更多次。我无法区分。我已经删除了重复的标志,即使我怀疑这是一个错误,如果你只能在提到的两个版本中生成它。正如我提到的,您只需创建一个布尔属性,并确保只允许在委托方法中触发一次url方案,并手动处理,以避免多次触发方法。我不知道我是否理解正确。然而,如果这没有帮助,德国劳埃德船级社!