【问题标题】:NSURL Error in XCode 8.2.1XCode 8.2.1 中的 NSURL 错误
【发布时间】:2017-06-24 00:38:57
【问题描述】:

初学者警告!请像 5 岁的孩子一样跟我说话,因为我是这个平台和语言的新手。我将不胜感激。

我的 Xcode 项目中有以下代码,可通过应用主页上的按钮在本机浏览器中打开网站:

@IBAction func faceURL(_ sender: Any) {
    NSURL *spotiURL = [NSURL URLWithString:@"https://www.facebook.com"];

    [[UIApplication sharedApplication] openURL:faceURL options:@{} completionHandler:^(BOOL success) {
        if (success){
            NSLog(@"Opened url");
        }   
    }];
}

上线:

NSURL *spotiURL = [NSURL URLWithString:@"https://www.facebook.com"];

它抛出以下错误:

预期的“,”分隔符一行中的连续语句必须用“;”分隔

建议在 URL 前的冒号和 @ 符号之间放置一个 ;。我知道其中一些已被新的 Xcode 和 Swift 格式弃用,但我无法为这个特定问题找到一个直接的答案。提前感谢您的智慧。

更新

感谢为此提供帮助的人们。万一其他人遇到这个问题,下面是最终可以触摸按钮并在本机浏览器中打开 URL 的代码:

@available(iOS 10.0, *)
@IBAction func openURL(_ sender: Any) {
let openURL = URL(string: "https://www.facebook.com")
UIApplication.shared.open(openURL!, options: [:], completionHandler: nil)
}

我还必须删除 ViewController 中的原始按钮和相应引用,替换按钮,并与 ViewController 建立新的连接以使其正常工作。非常感谢!

【问题讨论】:

  • 显然你复制粘贴是最好的,你只是复制了一个目标 c sn-p 用于在一个函数中以 swift 语法创建 nsurl 对象,你很幸运你的 mac 没有爆炸跨度>

标签: ios swift xcode button nsurl


【解决方案1】:

第一:你在openURL中有faceURL,而它应该是spotiURL

第二:您的意思是将您从 SO 复制的代码从 Obj-C 转换为 Swift,我将为您做 :)

let spotiURL = URL(string: "https://www.facebook.com")
UIApplication.shared.openURL(spotiURL!)

【讨论】:

  • 问题标记正确。问题是 OP 不知道他们将 Objective-C 代码复制并粘贴到他们的 Swift 文件中。
  • 谢谢@Mentos。这似乎有效,除了下面一行中的感叹号引发错误: UIApplication.shared.openURL(spotiURL!)
【解决方案2】:

您似乎正在尝试在 Swift 方法中使用 Objective C 代码。如果您的项目是用 Swift 编写的,那么这(可能)就是您需要的代码:

@IBAction func faceURL(_ sender: Any) {

    if let facebookURL = URL(string: "https://www.facebook.com")
    {
        UIApplication.shared.openURL(facebookURL) // the open method you were using doesn't exist in Swift
    }
}

我建议您通过一些教程来学习 iOS 开发的基础知识。

【讨论】:

  • 他使用的方法存在并编译,但仅在 iOS 10 中可用,因此需要 if #available(iOS 10.0, *) {}else{}
  • 谢谢@JedSoane 这消除了错误消息,让我可以在模拟器上编译和运行。当我单击按钮时,它崩溃了。 “线程 1:信号 SIGABRT”在 AppDelegate 文件中弹出以下行:“class AppDelegate: UIResponder, UIApplicationDelegate {” 关于为什么会发生这种情况的任何想法?这对我来说就像希腊语,但我正在学习!
  • @D.W.我猜你的按钮连接到一个不存在的方法(例如,如果你重命名了 IBAction 方法,那么按钮仍然会链接到旧的方法名称,你会得到一个 SIGABRT)。如果您正在使用情节提要,请打开情节提要,选择按钮,删除旧连接并创建一个链接到新方法的新连接。
  • 非常感谢。我替换了原来的按钮并做了一个全新的构建。在这和代码修订之间,我现在已经开始工作了。在上面发布我的功能代码。
【解决方案3】:

嗯,你混合了 Swift(第一行)和 ObjC(所有其他)语法,所以你必须首先选择其中一个。顺便说一句,您的“混合”代码看起来不错。

【讨论】:

  • 谢谢@Zeb。致力于解析针对此功能问题提出的多个解决方案。
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2014-11-30
相关资源
最近更新 更多