2015-02-14 4 views
-1

Я работал над своим устройством чтения XML-файлов с помощью TableViewController, и он работал отлично, но поскольку он не является гибким, я хотел перейти к другому ViewController, который включает в себя «TableView». Однако, хотя я думаю, что правильно сделал подключения (создав IBOutlet из таблицы, используя правильные объекты в пользовательской ячейке в классе CustomCell и т. Д.), Он показывает пустые ячейки.TableView показывает пустые ячейки при разборе XML

Вы можете найти код ниже. Я использую класс CustomCell для создания моей настраиваемой ячейки. Что мне здесь не хватает?

class originalViewController: UIViewController,UITableViewDelegate, NSXMLParserDelegate, UIScrollViewDelegate{ 

@IBOutlet var tableView: UITableView! 

var parser = NSXMLParser() 
var feeds = NSMutableArray() 
var elements = NSMutableDictionary() 
var element = NSString() 
var ftitle = NSMutableString?() 
var link = NSMutableString?() 
var fdescription = NSMutableString?() 
var fIMG = NSMutableString?() 
var fAuthor = NSMutableString?() 
var fDate = NSMutableString?() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") 


    feeds = [] 
    var url = NSURL(string: "http://www.marketoloji.com/?feed=rss2") 
    parser = NSXMLParser(contentsOfURL: url)! 
    parser.delegate = self 
    parser.shouldProcessNamespaces = false 
    parser.shouldReportNamespacePrefixes = false 
    parser.shouldResolveExternalEntities = false 
    parser.parse() 
} 


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "openPage" { 

     var indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow()! 
     let wvc: WebViewController = segue.destinationViewController as WebViewController 
     var selectedURL: String = feeds[indexPath.row].objectForKey("link") as String 
     selectedURL = selectedURL.stringByReplacingOccurrencesOfString(" ", withString: "") 
     selectedURL = selectedURL.stringByReplacingOccurrencesOfString("\n", withString: "") 
     wvc.selectedLink = selectedURL 
    } 
} 


func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) { 
    element = elementName 

    if (element as NSString).isEqualToString("item"){ 
     elements = NSMutableDictionary.alloc() 
     elements = [:] 
     ftitle = "" 
     link = "" 
     fdescription = "" 
     fAuthor = "" 
     fDate = "" 
     fIMG = "" 

    } else if element.isEqualToString("enclosure") { 
     var imgLink = attributeDict["url"] as String 
     imgLink = imgLink.stringByReplacingOccurrencesOfString(" ", withString: "") 
     imgLink = imgLink.stringByReplacingOccurrencesOfString("\n", withString: "") 

     fIMG?.appendString(imgLink) 
     println(imgLink) 
    } 
} 

func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!){ 

    if (elementName as NSString).isEqualToString("item"){ 
     if ftitle != nil { 
      elements.setObject(ftitle!, forKey: "title") 
     } 

     if link != nil { 
      elements.setObject(link!, forKey: "link") 
     } 

     if fdescription != nil { 
      elements.setObject(fdescription!, forKey: "description") 
     } 

     if fAuthor != nil { 
      elements.setObject(fAuthor!, forKey: "creator") 
     } 

     if fDate != nil { 
      elements.setObject(fDate!, forKey: "date") 
     } 

     if fIMG != nil { 
      elements.setObject(fIMG!, forKey: "imageLink") 
     } 

     feeds.addObject(elements) 
    } 

} 

func parser(parser: NSXMLParser!, foundCharacters string: String!) { 

    if element.isEqualToString("title") { 
     ftitle?.appendString(string) 
    } else if element.isEqualToString("link") { 
     link?.appendString(string) 
    } else if element.isEqualToString("description") { 
     fdescription?.appendString(string) 
    } else if element.isEqualToString("dc:creator") { 
     fAuthor?.appendString(string) 
    } else if element.isEqualToString("pubDate") { 
     fDate?.appendString(string) 
    } 

} 

func parserDidEndDocument(parser: NSXMLParser!) { 
    self.tableView.reloadData() 
} 

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 20 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    //let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("Cell") as CustomCell 
    let cell:CustomCell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as CustomCell 

    cell.setCell(feeds.objectAtIndex(indexPath.row).objectForKey("title") as String, fDescription: feeds.objectAtIndex(indexPath.row).objectForKey("description") as String, fAuthor: feeds.objectAtIndex(indexPath.row).objectForKey("creator") as String, fDate: feeds.objectAtIndex(indexPath.row).objectForKey("date") as String, fImage: feeds.objectAtIndex(indexPath.row).objectForKey("imageLink") as String) 




    //cell.backgroundColor = UIColor.clearColor() 

    return cell 
} 

}

+0

Где вы создали свою собственную ячейку? Если вы сделали это в раскадровке, вы не должны регистрировать класс. – rdelmar

+0

Нет, я создал его программно как отдельный класс. – johncoffey

+0

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

ответ

0

Разобрался что я не подключить делегат и источник данных таблицы в контроллере представления, который был основной проблемой.

Смежные вопросы