在iPhone OS中未使用自定义URL架构调用handleOpenURL

时间:2010-06-02 20:13:29

标签: iphone objective-c xcode url-scheme

我已成功将自己的网址方案添加到我的应用程序中。应用程序使用这些方案正确启动。

现在我想处理传入的数据但是没有调用委托。它是一个通用应用程序,我已将以下功能添加到AppDelegates:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}

我正在使用以下架构进行测试:myapp://appalarm.com ...并且期望在URLString

中成为appalarm.com

它出了什么问题?

感谢您的回复!

3 个答案:

答案 0 :(得分:7)

我试图在another post中澄清一下。阿什利克拉克的答案只是部分正确。在OS 4.0下,handleOpenURL被调用(至少对于文件URL),你必须实现它来处理应用程序在后台时的打开url调用。因此,在两种方法中打开文件可能会打开两次(如果applicationDidFinishLaunchingWithOptions返回YES,它应该是)。请参阅another post

答案 1 :(得分:5)

如果您的应用程序委托实现了'applicationDidFinishLaunchingWithOptions:',则永远不会调用'handleOpenURL:'方法。查看通过其他方法传递的选项,以确定应用程序的启动方式以及应实施的行为。

答案 2 :(得分:1)

尝试将您的代码放入以下功能

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}