【问题标题】:App crashes up when opening url in safari在 safari 中打开 url 时应用程序崩溃
【发布时间】:2012-05-08 20:47:17
【问题描述】:

我正在尝试使用以下代码在 safari 中打开网址:

- (IBAction)webButton:(id)sender {

    NSString *url = @"www.google.com";

    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];


}

但每次应用崩溃。

有人遇到过类似情况吗?

这里是关闭崩溃:http://dl.dropbox.com/u/77033905/urlInSafariCrashesUp.png

更新:

NSString *recipients = @"mailto:first@example.com?subject=Hello from Croatia!";
    NSString *body = @"&body=It is sunny in Croatia!";

    NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
    email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];

这用于打开邮件,但与 sharedApplication 相同。它崩溃了。

更新 2: 控制台日志: argv 字符 ** 0xbffff520 *argv 字符 * 0xbffff658 **argv 字符 '/' argc int 1

更新 3: 它调用 IBAction 但崩溃了。当我在根视图中尝试此代码时,它可以工作。我在 IB 按钮中添加并连接,一切正常。

在子视图中调用 UIApplication sharedApplication 有问题吗?我应该用其他方式打电话吗?

更新 4:

我发现问题是即使我在子视图中调用空 IBAction,所以问题显然不在 UIApplication 中,而是在子视图中调用 IBAction。

- (IBAction)webButton:(id)sender {

  // empty

}

更新 5: 解决方案:How to call IBAction in subview?

【问题讨论】:

  • 在 iphone 上试过。崩溃了。
  • 您确定您的 IBAction 连接正确吗?您可以在 webButton 方法中设置一个断点以确保您进入该方法吗?
  • 是的,我正在学习方法。请看一下更新后的第一篇文章。
  • 您能否发布崩溃的控制台输出?
  • 这是我在一篇文章(堆栈)中发现的:“您可能需要保留 URL 对象。这曾经是我的问题”。链接:stackoverflow.com/questions/5775077/…

标签: iphone objective-c xcode safari nsurl


【解决方案1】:

您没有提供有效的 URL,URL 的格式始终为 scheme:<host part>

// This is correct and will work:
[[UIApplication sharedApplication] openUrl:[NSURL URLWithString:@"http://www.google.com"]]

// Updated with body and subject:
NSMutableString* url = [NSMutableString stringWithString:@"mailto:"];
[url appendString:@"first@example.com"];
[url appendFormat:@"?subject=%@", [@"Hello from Croatia" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[url appendFormat:@"&body=%@", [@"This is a body" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

【讨论】:

  • 我认为您还有其他问题,我一直使用相同的代码并且没有任何问题。
  • 它再次崩溃,你的代码。我在我的子视图中调用上面的代码,也许这就是问题所在。因为当我尝试在根视图中调用此代码时,它可以工作。
  • @CroiOS 您需要更清楚地说明您要完成什么,以及到底出了什么问题。您的更新不断改变您的问题。
  • 是的,我的更新改变了问题,因为我认为问题出在 UIApplication 中,但事实并非如此。对此我提出了新问题,因为它不像这样。 stackoverflow.com/questions/10515259/…
【解决方案2】:

如果你做类似的事情会崩溃

NSString *url = @"http://www.google.com";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

我相信您需要其中的“http://”。

【讨论】:

  • 这一点都不奇怪,如果你百分比转义http://www.google.com 你会得到:http%3A%2F%2Fwww.google.com 这不是一个有效的 URL(见下面我的回答)。
  • 解决方法是@SveinungKvalBakken的方法。
  • 但这对我不起作用,我在第一篇文章中进行了更新。请看一下
  • 你看我的帖子了吗?您正在转义用于分隔方案、主机和参数的特殊字符,看看您应该如何只转义 URL 参数的内容,而不是 URL 本身。
  • 我应该转义网址的哪一部分?
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
相关资源
最近更新 更多