2015-02-03 9 views
5

Die beiden ersten Beispiel Links, um die dritte arbeiten NIL zurückSWIFT: Warum ist „NSURL (string:“ mit Null zurückkehrt, auch wenn es in einem Browser eine gültige URL ist

Warum ist NSURL nil Rückkehr für?. ? solche Schnur, obwohl es in einem Browser eine gültige uRL ist

soll ich die Zeichenfolge mehr verarbeiten

Hier ist mein Code:?

import UIKit 
import Foundation 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSXMLParserDelegate { 

var myFeed : NSArray = [] 
var url : NSURL! 
var feedURL : NSURL! 
var selectedFeedURL = String() 

@IBOutlet var tableFeeds: UITableView! 
@IBOutlet var webView: UIWebView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set feed url. 
    //url = NSURL(string: "http://www.skysports.com/rss/0,20514,11661,00.xml")! //This seems to work 
    //url = NSURL(string: "http://www.formula1.com/rss/news/latest.rss")! //This seems to work 
    url = NSURL(string: "http://www.multirotorusa.com/feed/")! 

    loadRss(url); 
} 

func loadRss(data: NSURL) { 
    var myParser : XmlParserManager = XmlParserManager.alloc().initWithURL(data) as XmlParserManager 
    myFeed = myParser.feeds 

    tableFeeds.reloadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return myFeed.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 

    var dict : NSDictionary! = myFeed.objectAtIndex(indexPath.row) as NSDictionary 

    cell.textLabel?.text = myFeed.objectAtIndex(indexPath.row).objectForKey("title") as? String 
    cell.detailTextLabel?.text = myFeed.objectAtIndex(indexPath.row).objectForKey("description") as? String 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    var indexPath: NSIndexPath = self.tableFeeds.indexPathForSelectedRow()! 
    var selectedFeedURL = myFeed.objectAtIndex(indexPath.row).objectForKey("link") as String 
    selectedFeedURL = selectedFeedURL.stringByReplacingOccurrencesOfString(" ", withString:"") 
    selectedFeedURL = selectedFeedURL.stringByReplacingOccurrencesOfString("\n", withString:"") 

    // feedURL = NSURL(fileURLWithPath: selectedFeedURL) //This returns with: URL + /%09%09 -- file:/// 
    feedURL = NSURL(string: selectedFeedURL) //This returns with NIL 

    println("Selected Feed URL: \(selectedFeedURL)") 
    println("Feed URL: \(feedURL)") 

    if feedURL != nil { 
     let request : NSURLRequest = NSURLRequest(URL: feedURL!) 
     webView.loadRequest(request) 
     println("Feed URL: \(feedURL)") //Doesn't make it here 
    } 
    } 
} 

Irgendwelche Vorschläge

+0

Sind Sie sicher, dass es keine Antwort gibt? Scheint gut für mich zu funktionieren. – bjtitus

+0

Dies kann auch auftreten, wenn in der URL nicht-maskierte Zeichen enthalten sind, einschließlich eines nachgestellten Leerzeichen ... – gone

Antwort

8

Sie sollten die URL wie diese URL-kodieren:

selectedFeedUrl = selectedFeedUrl.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

+0

Mit Ihrer Methode bekomme ich das: http://www.multirotorusa.com/dji-phantom-dont-be -annoying /% 09% 09 aber die Webseite kann nicht gefunden werden. Warum ist% 09% 09 am Ende der Zeichenfolge und wie kann ich es loswerden? –

+0

Schneiden Sie das Leerzeichen von den Enden der Zeichenfolge ab. % 09 ist nur ein Tab (\ t). – fred02138

3

Danke Jungs für Ihre Hilfe. Ich habe diese beiden Zeilen zu meinem Code und es funktioniert jetzt:

selectedFeedURL = selectedFeedURL.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)! 
    selectedFeedURL = selectedFeedURL.stringByReplacingOccurrencesOfString("%09%09", withString:"") 
5

In iOs 9:

myString = myString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 

Hoffe, dass es

+0

Vielen Dank, Bruder. – Jerome

3

Für swift3 hilft Ihnen diese

let url = URL(string:url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)! 
tun können