【问题标题】:Passing parameters using url scheme使用 url 方案传递参数
【发布时间】:2013-02-18 15:00:39
【问题描述】:

我正在开发一个可以通过 URL 启动的应用程序。我已经在信息页面上使用 xcode 定义了我的 url 方案。我填写了标识符 my Bundle 标识符和 URL Schemes myapp。

现在如果我尝试在 safari myapp://foo 中打开,它会启动我的应用程序并在我的断点处停止

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

方法。

问题是注解,url,application,sourceapplication参数为nil。所以不能传参数...

【问题讨论】:

  • 您针对/测试哪个版本的 iOS?
  • 你是说这个方法的url变量是nil,还是url的parameterString(因为是NSURL)是nil?你如何确定它为零?
  • 您确定您传递的是有效的编码链接吗?我经常使用这种委托方法,但我从未经历过这种行为!
  • @BillyLazzaro nsurl 为零
  • @Alexander 就像我在问题中所说的那样,我正在尝试打开地址 myapp://foo,它会启动我的应用程序,但我没有得到字符串 foo。我也试过 myapp://?foo=1234,没有运气...

标签: iphone ios cocoa-touch url-scheme


【解决方案1】:

经过不必要的时间损失,我发现问题出在调试器上。它显示 url 为 nil,如果我尝试打印描述它会说

Printing description of url:
<nil>

但如果我尝试 NSLog 它会显示 url。 如果将以下代码放入方法中

if (! url) {
    return NO;
}

调试器还会显示 url。

【讨论】:

  • 在这种情况下,请确保您的项目处于“调试”模式而不是“发布”模式。在默认的发布模式下,可以优化很多东西
【解决方案2】:

您确定您的项目处于调试模式!?看这里http://nerdwa.com/index.php/2011/09/debugrelease-schemes-in-xcode-4/

【讨论】:

  • 是的,我很确定。我的代码中还有许多预处理器指令,例如#ifdef DEBUG
  • 有时调试器会特别在设备上执行此操作。只要您的 nslog 看到您应该没问题的值。如果你打破并输入“po url”你会得到什么?
  • 另外我想问一下您将如何传递数据?我是否建议使用 base64 编码的 json 对象。这允许结构化数据,并且非常简单
  • 是的,就像在我的回答中一样,我看到了预期的值,然后我可以解析等等。我无法将我的答案标记为正确,因为我必须等待一天...
  • 实际上就像我在问题中已经说过的那样,我只需输入 safari myapp://fooo 的地址栏。所以我不会从我的另一个应用程序中调用它。所有编码都必须由 safari 完成
猜你喜欢
  • 1970-01-01
  • 2012-07-14
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多