0

对我来说,解释这一点的最简单方法是上传一个测试应用程序,因此我删除了所有不必要的内容,并将一个简单的项目上传到 SendSpace。

http://www.sendspace.com/file/z86g0z

我正在编写一个应用程序,它将接收来自 Mobile safari 的自定义 URL,例如“plasma://hello-world”。然后这些由我的应用程序处理,并在屏幕上显示通知。

在测试应用程序中,主类是一个单例,并且有一个“测试”按钮,它演示了当您通过 URL 打开它时会发生什么。您将获得显示在屏幕标签中的自定义链接和顶部的绿色通知标签,然后逐渐消失。在这个过程中,Xcode 控制台会显示这个.....

2012-09-05 21:53:29.719 PlasmaLinker[2866:f803] Link: plasma:Test+Link
2012-09-05 21:53:29.778 PlasmaLinker[2866:f803] Show Alert: Success - Link Received
2012-09-05 21:53:35.779 PlasmaLinker[2866:f803] Remove Alert

一切正常。

现在我通过输入“plasma://hello-world”从 Mobile Safari 启动它我按回车键,Safari 切换到我的应用程序,控制台显示完全相同的输出(使用任何 URL 启动它),但是我什么也没得到在用户界面中。链接未放置在文本框中,通知永远不会显示。

我究竟做错了什么?使用 URL 启动后,您可以再次单击测试按钮并查看 UI 元素根据需要更改。它让我发疯,但我不知道能够在通过 URL 启动时让它工作。有人可以对此有所了解吗?

亲切的问候

等离子体

4

1 回答 1

1

获取 的单例方法将PlasmaLinker_ViewController返回一个与情节提要创建并添加到主窗口的实例不同的实例。

一个有效的例子,(在您的应用程序委托中)

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    NSString *link = [NSString stringWithFormat:@"%@",url];
    vc = (PlasmaLinker_ViewController*) self.window.rootViewController;
    [vc processLink:link];

    return YES;

}

另一种选择是覆盖视图控制器-(id)initWithCoder:(NSCoder *)decoder并将您的共享实例设置self为该方法。

+ (PlasmaLinker_ViewController *) sharedInstance
{
    return _sharedInstance;
}

-(id)initWithCoder:(NSCoder *)decoder {

    NSLog(@"In initWithCoder!");
    if (!_sharedInstance) {
        if (self = [super initWithCoder:decoder]) {
            _sharedInstance = self;
        }
    }
    return _sharedInstance;
}
于 2012-09-10T08:17:58.737 回答