2015-11-02 1 views
2

Я сделал RSSParser, и я wan't преобразовать дату из yyyy-MM-dd'T'HH:mm:ssZ в dd/MM/yyyy:Невозможно преобразовать дату из строки после XmlParser

func setDateForCell(cell:ActuTblCell, indexPath:NSIndexPath) { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
    let dateString = posts.objectAtIndex(indexPath.row).valueForKey("date") as! String 
    if let dateAdded = dateFormatter.dateFromString(dateString) 
    { 
     dateFormatter.dateFormat = "dd/MM/yyyy" 
     cell.dateActuCell?.text = "\(dateFormatter.stringFromDate(dateAdded))" 
    } 
    //cell.dateActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("date") as? String 
} 

Но когда я ставлю точку останова, моя функция не перейдите в условие if.

import UIKit 

@objc 
protocol ActualitesViewControllerDelegate { 
    optional func toggleLeftPanel() 
    optional func collapseSidePanels() 
} 

class ActualitesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSXMLParserDelegate { 
    @IBOutlet var tableView: UITableView! 

    var parser = NSXMLParser() 
    var posts = NSMutableArray() 
    var elements = NSMutableDictionary() 
    var element = NSString() 
    var title1 = NSMutableString() 
    var date = NSMutableString() 
    var dscrptn = NSMutableString() 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     self.navigationController?.navigationBar.barTintColor = UIColor(red: 38.0/255.0, green: 51.0/255.0, blue: 85.0/255.0, alpha: 1.0) 
     self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Gotham", size: 13)!, NSForegroundColorAttributeName : UIColor.whiteColor()] 
     self.title = "ACTUALITÉS" 

     self.beginParsing() 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func beginParsing() 
    { 
     posts = [] 
     parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://www.solutis.fr/actualites-rachat-credit,rss.html"))!)! 
     parser.delegate = self 
     parser.parse() 

     tableView!.reloadData() 
    } 

    //XMLParser Methods 

    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) 
    { 
     element = elementName 
     if (elementName as NSString).isEqualToString("item") 
     { 
      elements = NSMutableDictionary() 
      elements = [:] 
      title1 = NSMutableString() 
      title1 = "" 
      date = NSMutableString() 
      date = "" 
      dscrptn = NSMutableString() 
      dscrptn = "" 
     } 
    } 

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) 
    { 
     if (elementName as NSString).isEqualToString("item") { 
      if !title1.isEqual(nil) { 
       elements.setObject(title1, forKey: "title") 
      } 
      if !date.isEqual(nil) { 
       elements.setObject(date, forKey: "date") 
      } 
      if !dscrptn.isEqual(nil) { 
       elements.setObject(dscrptn, forKey: "dscrptn") 
      } 

      posts.addObject(elements) 
     } 
    } 

    func parser(parser: NSXMLParser, foundCharacters string: String) 
    { 
     if element.isEqualToString("title") { 
      title1.appendString(string) 
     } else if element.isEqualToString("pubDate") { 
      date.appendString(string) 
     } else if element.isEqualToString("description") { 
      dscrptn.appendString(string) 
     } 
    } 

    //Tableview Methods 

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

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 10 
    } 

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


    func basicCellAtIndexPath(indexPath:NSIndexPath) -> ActuTblCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! ActuTblCell 

     setTitleForCell(cell, indexPath: indexPath) 
     setDateForCell(cell, indexPath: indexPath) 
     setDescriptionForCell(cell, indexPath: indexPath) 
     return cell 
    } 

    func setTitleForCell(cell:ActuTblCell, indexPath:NSIndexPath) { 
     cell.titleActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String 
    } 

    func setDateForCell(cell:ActuTblCell, indexPath:NSIndexPath) { 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
     let dateString = posts.objectAtIndex(indexPath.row).valueForKey("date") as! String 
     if let dateAdded = dateFormatter.dateFromString(dateString) 
     { 
      dateFormatter.dateFormat = "dd/MM/yyyy" 
      cell.dateActuCell?.text = "\(dateFormatter.stringFromDate(dateAdded))" 
     } 
     //cell.dateActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("date") as? String 
    } 

    func setDescriptionForCell(cell:ActuTblCell, indexPath:NSIndexPath) { 
     cell.descriptionActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("dscrptn") as! NSString as String 
    } 
} 

Если я:

print(posts.objectAtIndex(indexPath.row).valueForKey("date") as? String) 

я получаю:

Факультативно ("2015-10-19T10: 59: 53 + 00: 00 \ п \ т \ т \ т")

+1

Пожалуйста, добавьте пример полученной строки даты. Замечание: используйте 'objectForKey:', а не 'valueForKey:', если вам действительно не нужен метод KVC. – vadian

+0

@vadian Посмотрите мои править пожалуйста –

ответ

0

Строка, которую вы получаете, содержит символы пробелов и символов новой строки.
Обрежьте строку перед тем, как передать ее в формат даты.

let dateString = posts.objectAtIndex(indexPath.row).objectForKey("date") as! String 
if let dateAdded = dateFormatter.dateFromString(dateString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) { ... 
+0

Отлично, я не думаю, что печатаю свою дату, потому что я узнал, что было показано в камере, спасибо. –

2

Я новичок в ответе на вопросы здесь, но я хотел бы помочь!

Я думаю, что ваш dateFormatter не разбирая DateString вы проходящее в.

Я бы распечатать на дату (т.е. бросить в DebugPrint после захвата в DateString от объекта) и проверить, если он имеет в том же формате, который вам нужен в этой строке: dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

, который должен выглядеть так: «2015-11-02'T'01: 22: 18-08: 00», если строка правильная.

+0

Посмотрите, пожалуйста, на редактирование –

+0

У меня нет мыслителя для печати, мне помог другой ответ, где они пробелы и символ новой строки. –

+1

Отлично! Теперь вы знаете немного больше о том, как отлаживать ваш код :) – hyb175