Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序:openUrl:在iOS9中被多次调用_Ios_Objective C_Ios9_Uiapplicationdelegate_Openurl - Fatal编程技术网

应用程序:openUrl:在iOS9中被多次调用

应用程序: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

对于这个问题,我创建了一个具有单个视图的新项目

我设置了一个url方案,并在视图中添加了一个标签

代码在这里

- (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;
}
然后我通过这些步骤发现了这个问题:

  • 使用safari通过输入url方案启动应用程序
  • 等待它跳转到应用程序,然后立即按home(主页)按钮
  • 点击应用图标继续
  • 在标签上获取两行url
  • UIApplication多次调用application:openUrl:。 我试着使用这个代理,同样的问题

    - (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方案,并手动处理,以避免多次触发方法。我不知道我是否理解正确。然而,如果这没有帮助,德国劳埃德船级社!