Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';NSURLRequest&x27;没有名为'的成员;URL';-敏捷的_Url_Swift_Webview_Uiwebview - Fatal编程技术网

';NSURLRequest&x27;没有名为'的成员;URL';-敏捷的

';NSURLRequest&x27;没有名为'的成员;URL';-敏捷的,url,swift,webview,uiwebview,Url,Swift,Webview,Uiwebview,嗨,我对Swift的编码真的很陌生,我正试图遵循这本书中的代码:。学习James Bucanek编写的iOS 8应用程序开发第二版 特别是,我正在阅读第3章-构建URL缩短应用程序,但尽管我准确地复制了代码,但我在第76页的代码中发现了一个错误: 如果让ToSorten=webView.request.URL.absoluteString{ 哪些状态“NSURLRequest”没有名为“URL”的成员 我曾尝试在谷歌上搜索答案,但不幸的是没有找到任何答案。我能找到的任何回应似乎都表明我的代码应该

嗨,我对Swift的编码真的很陌生,我正试图遵循这本书中的代码:。学习James Bucanek编写的iOS 8应用程序开发第二版

特别是,我正在阅读第3章-构建URL缩短应用程序,但尽管我准确地复制了代码,但我在第76页的代码中发现了一个错误:

如果让ToSorten=webView.request.URL.absoluteString{

哪些状态“NSURLRequest”没有名为“URL”的成员

我曾尝试在谷歌上搜索答案,但不幸的是没有找到任何答案。我能找到的任何回应似乎都表明我的代码应该正常工作(例如)。这似乎是最接近的答案,但解决方案似乎对我不起作用。如果我在请求后添加一个?,它将至少构建它,但我随后返回一个nil变量

我使用的是Xcode v6.1.1。下面是ViewController.swift中出现错误的一段代码:

    let GoDaddyAccountKey = "0123456789abcdef0123456789abcdef" //this is replaced by my actual account key in my own code
    var shortenURLConnection: NSURLConnection?
    var shortURLData: NSMutableData?

    @IBAction func shortenURL( AnyObject ) {

        if let toShorten = webView.request?.URL.absoluteString { // ? now added

        let encodedURL = toShorten.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
        let urlString = "http://api.x.co/Squeeze.svc/text/\(GoDaddyAccountKey)?url=\(encodedURL)"
        shortURLData = NSMutableData()
        if let firstrequest = NSURL(string: urlString) //added if here and removed !
        let request = NSURLRequest(URL:firstrequest)
        shortenURLConnection = NSURLConnection(request:request, delegate:self)
        shortenButton.enabled = false
        }
        }
    }
如果您对我如何解决这个问题有任何建议,我将非常感激

更新:


根据下面Ashley的建议,我修改了我的代码,使其不再出现错误(请参见上面的注释)。但是,它现在不再运行。这似乎是因为URL字符串被创建为
http://api.x.co/Squeeze.svc/text/d558979bb9b84eddb76d8c8dd9740ce3?url=Optional("http://www.apple.com/")
。因此,问题在于所包含的
可选()
,从而使其成为无效URL。是否有人对如何删除此URL有建议?

请求
UIWebView
上的可选属性:

var request: NSURLRequest? { get }
另外,
stringByAddingPercentEscapesUsingEncoding
返回可选的:

func stringByAddingPercentEscapesUsingEncoding(_ encoding: UInt) -> String?
您需要的是让用户在几个地方使用可选绑定:

if let toShorten = webView.request?.URL.absoluteString {

    if let encodedURL = toShorten.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {

        let urlString = "http://api.x.co/Squeeze.svc/text/\(GoDaddyAccountKey)?url=\(encodedURL)"
        shortURLData = NSMutableData()

        if let firstrequest = NSURL(string: urlString) {  // If a method can return a nil, don't force unwrap it
            let request = NSURLRequest(URL:first request)
            shortenURLConnection = NSURLConnection(request:request, delegate:self)
            shortenButton.enabled = false
        }

    }
}
有关详细信息,请参阅


请参阅

我认为应该是
webView.request?.URL.absoluteString
;-)谢谢。不幸的是,当我尝试使用它时,当我尝试从应用程序运行函数时,它会在“let firstrequest=NSURL(string:urlString)!”上给出“致命错误:在展开可选值时意外发现为零”行。这告诉您的是一个假定为非零的值,不是吗!您应该真正避免在自己的代码中使用强制展开。如果您从NSURL(字符串:urlString)中删除了!你会看到问题的。我更新了我的答案。感谢你在这个Ashley上的帮助。不幸的是,虽然该代码不再给我错误,但它实际上也没有做它应该做的事情。我认为这是因为现在没有什么东西可以每次打开它,因此它没有运行连接。我不明白为什么会这样将返回一个零值。对于所有的问题,我很抱歉,我非常感谢您抽出时间与我联系!如果您查看
-[NSURL initWithString]的文档
您将看到字符串必须符合有效的URL格式,并且只包含有效字符。我建议打印出
urlString
,以便您可以看到它包含的内容(可能会添加到原始问题中)。你能删除不相关的代码吗?太多的代码会让人看不懂你的问题!对不起,我看到太多的帖子说代码不够,我不确定是什么导致了问题。我将进行编辑,只显示出现错误的函数。谢谢。关键是提供相关代码,并确定这是什么is将经常引导您找到答案。谢谢Ashley。我已经更新了问题,并在下面添加了您帮助中的更新。