appdelegate 中的 NSURLSessionDataTask

Posted

技术标签:

【中文标题】appdelegate 中的 NSURLSessionDataTask【英文标题】:NSURLSessionDataTask in appdelegate 【发布时间】:2016-04-16 17:37:17 【问题描述】:

当应用程序从邮件打开时,我会在 appDelegate 中调用 NSURLSessionDataTask,所以在这个函数中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

我试过了还是不行,为什么??

我需要从这个函数中得到一个查询

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

NSURLComponents *components = [[NSURLComponents alloc] init];
components.query = [url query];

BOOL confirmRegistration = NO;
NSString *userToken;
for (NSURLQueryItem *queryItem in components.queryItems) 
    if ([queryItem.name isEqualToString:@"userToken"])
    
        userToken = queryItem.value;
    
    else if ([queryItem.name isEqualToString:@"registrationType"])
    
        if ([queryItem.value isEqualToString:@"confirmRegistration"])
        
            confirmRegistration = YES;
        
    


//la app è stata aperta con la mail di conferma registrazione
if (confirmRegistration)

    NSDictionary* userInfo = @@"userToken": userToken;
    [[NSNotificationCenter defaultCenter] postNotificationName:@"confirmRegistration" object:nil userInfo:userInfo];


return YES;

谢谢

【问题讨论】:

“它不起作用”是什么意思?它会崩溃吗?它不会被调用吗?它会启动并卡住吗? 【参考方案1】:

从任何地方打开应用程序时,都会调用application:didFinishLaunchingWithOptions:

您可以在此处检查 launchOptions 以查看是什么触发了应用程序的打开。

例如,如果应用程序是使用推送通知打开的。您可以执行以下操作。

if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] 
    self.application(application, didReceiveRemoteNotification: userInfo)

您可以查看从 Mail 打开应用程序时获得的密钥。

更新

您可以打印诸如 UIApplicationLaunchOptionsSourceApplicationKeyUIApplicationLaunchOptionsURLKey 之类的键,或将其与触发应用程序启动的原因进行比较,然后开始您的工作。

当您从 Mail 打开您的应用程序时,打印以下内容并使用它来比较并开始您的工作。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    print(launchOptions?[UIApplicationLaunchOptionsSourceApplicationKey])
    print(launchOptions?[UIApplicationLaunchOptionsURLKey])
    return true

【讨论】:

每两个返回null 从邮件中打开应用程序并打印(launchOptions)并粘贴。

以上是关于appdelegate 中的 NSURLSessionDataTask的主要内容,如果未能解决你的问题,请参考以下文章

AppDelegate 中的奇怪泄漏

为啥 AppDelegate 中的窗口为零

appdelegate 中的 NSURLSessionDataTask

AppDelegate 中的 didFinishLaunchingWithOptions 参数是啥

UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?

从 AppDelegate 中的 ViewController 获取参数。