Ios 避免在应用程序委托中重复执行代码

Ios 避免在应用程序委托中重复执行代码,ios,objective-c,push-notification,appdelegate,Ios,Objective C,Push Notification,Appdelegate,我的应用程序委托中有一段代码,它通知我的第一个视图控制器,用户希望立即显示一些内容: - (void)notifyAppWithURL:(NSURL *)url { if(!url){ return; } NSDictionary *dict = [self parseQueryString:[url query]]; NSString *host = [url host]; [self notifyApp:host value:dict[

我的应用程序委托中有一段代码,它通知我的第一个视图控制器,用户希望立即显示一些内容:

- (void)notifyAppWithURL:(NSURL *)url {
    if(!url){
        return;
    }
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSString *host = [url host];
    [self notifyApp:host value:dict[@"id"]];
}

- (void)notifyApp:(NSString *)key value:(NSString *)value {
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ShowOnLoad" object:nil userInfo:@{
                                                                                                   key : value
                                                                                                   }];
}
我通过
didReceiveMemotentification
openURL
委托方法触发它。从那两个人那里一切都很好

但是,如果应用程序已关闭,则此方法被调用:

did使用选项完成启动
,我拨打了相同的电话:

if(launchOptions[UIApplicationLaunchOptionsURLKey]){
    [self notifyAppWithURL:launchOptions[UIApplicationLaunchOptionsURLKey]];
}
在内部,然后向视图控制器发送两个
NSNotification

两个问题:

在我的应用程序代理中重复调用
notifyAppWithURL
,如何解决此问题

此外,是否有更好、更广泛的解决方案来处理来自用户的多个传入操作(然后触发一些其他操作)?

说明如下:

如果必须启动应用程序才能打开URL,应用程序将首先调用
应用程序:willFinishLaunchingWithOptions:
应用程序:didffinishlaunchingwithoptions:
方法,然后调用此方法

您收到第一个通知是因为您在
应用程序:didFinishLaunchingWithOptions:
中调用了
notifyAppWithURL:
,第二个通知是因为您在
应用程序:openURL:sourceApplication:annotation:
中调用了它。一个简单的解决方案是在
应用程序:didFinishLaunchingWithOptions:
中删除调用

至于第二个问题,实际上没有一种通用的方法来处理导致某些代码运行两次或更多次的多个操作。是确保代码块在整个过程中只运行一次的标准方法,但这显然不是您想要的