2016-08-26 2 views
0
import UIKit 
var operationViewFlag: Int! 
var dataReceived: Int! 

class HomeCellView: UITableViewCell 
{ 

@IBOutlet weak var btn_tablecell_Delete: UIButton! 
@IBOutlet weak var btn_tablecell_Edit: UIButton! 
@IBOutlet weak var lbl_tablecell_Email: UILabel! 
} 

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate, NSXMLParserDelegate 
{ 
@IBOutlet weak var TableView_Mainscreen: UITableView! 
@IBOutlet weak var lbl_MainScreen_Title: UILabel! 
@IBOutlet weak var btn_Mainscreen_Insert: UIButton! 

var databasepath:String! 
var arrayStudInfo:NSMutableArray! 



// for only xml parsing 
var parser = NSXMLParser() 
var posts = NSMutableArray() 
var elements = NSMutableDictionary() 
var element = NSString() 
var title1 = NSMutableString() 
var date = NSMutableString() 

// viewDidLoad 
override func viewDidLoad() 
{ 

    super.viewDidLoad() 
    arrayStudInfo = NSMutableArray()   
    self.beginParsing(); 
    TableView_Mainscreen.reloadData() 
} 

//viewWillAppear 
override func viewWillAppear(animated: Bool) 
{ 
    super.viewWillAppear(true) 
    TableView_Mainscreen.reloadData() 
} 

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

// TableView Methods 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    print("Number Of Row:\(posts.count)") 
    return posts.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let Cell = tableView.dequeueReusableCellWithIdentifier("CellHome") as! HomeCellView 

    print("Index path - > \(posts[indexPath.row])") 

    Cell.lbl_tablecell_Email.text! = String("\(posts[(indexPath.row)]["title"])") 
    return Cell 
} 
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) 
{ 
    element = elementName 
    print("element Name : - \(elementName)") 
    if (elementName as NSString).isEqualToString("item") 
    { 
     elements = NSMutableDictionary() 
     elements = [:] 
     title1 = NSMutableString() 
     title1 = "" 
     date = NSMutableString() 
     date = "" 
    } 
} 


func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) 
{ 
    print("element Name : - \(elementName)") 
    if (elementName as NSString).isEqualToString("item") 
    { 
     if !title1.isEqual(nil) { 
      elements.setObject(title1, forKey: "Name") 
     } 
     if !date.isEqual(nil) { 
      elements.setObject(date, forKey: "Level") 
     } 
     posts.addObject(elements) 
    } 
} 

func parser(parser: NSXMLParser, foundCharacters string: String) 
{ 
    if element.isEqualToString("Name") 
    { 
     title1.appendString(string) 
    } else if element.isEqualToString("Level") { 
     date.appendString(string) 
    } 
} 
func beginParsing() 
{ 
    posts = [] 
    parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://d1xzuxjlafny7l.cloudfront.net/downloads/Party.xml"))!)! 

    parser.delegate = self 
    parser.parse() 
} 

func parserDidEndDocument(parser: NSXMLParser) { 
    TableView_Mainscreen.reloadData() 
} 
} 

Я хочу отобразить результат xml api в соответствующем formate. Я хочу показать имя из него в виде таблицы. Сейчас я не получаю от этого никаких данных. Прежде всего, если будут получены какие-либо данные, тогда мы сможем подумать о том, чтобы преобразовать или упорядочить в любом формировании, но я ничего не понимаю. кто-нибудь, пожалуйста, помогите за то же самое.Не получать XML-данные в надлежащем формате для отображения в виде таблицы в Swift

ответ

0

Edit:

Oh! Я не проверял ваш XML достаточно тщательно! Фактически, это не имеет никакого отношения к парсеру, загружающему данные асинхронно (я оставлю свой первоначальный намек относительно parserDidEndDocument ниже, хотя вам может понадобиться его после реализации функции обновления).

Оказывается, вы просто не использовали правильные имена, т. Е. Строки для элементов. Вот исправленный код:

В tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell (обратите внимание, я немного изменил, как получить строку, в противном случае вы можете получить уродливый префикс в нем)

... 
     let nameString = posts[(indexPath.row)]["Name"] as! String 
     Cell.lbl_tablecell_Email.text = nameString 
... 

В parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])

... 
    if (elementName as NSString).isEqualToString("Player") 
... 

В parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)

... 
    if (elementName as NSString).isEqualToString("Player") 
... 

В parser(parser: NSXMLParser, foundCharacters string: String) (обратите внимание, кажется, вам есть разрыв строки и некоторые пробелы в вашем XML, я отрезал, что от)

... 
    if element.isEqualToString("Name") && !(string.hasPrefix("\n")) 
... 

Я предполагаю, что вы не понимали эти строковые ключи, которые идентифицируют элементы являются фактически только имя элемента, в основном , В вашем коде есть несколько мелких вещей, которые можно оптимизировать и/или улучшить (например, вам не нужно инициализировать некоторые var, так как вы просто перезапускаете их в другом месте до фактического использования в любом случае, а также именование переменных) ,

Я попробовал это с предоставленной вами ссылкой и теперь работает.

сутью предыдущего ответа: Реализовать

func parserDidEndDocument(parser: NSXMLParser) { 
    TableView_Mainscreen.reloadData() 
} 

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

+0

Я отредактировал свой код. так что теперь вы получите правильную идею. о получении данных –

+0

Если вы хотите, я также могу дать вам git repo, показывая вам незначительные вещи с вашим кодом. – Gero

+0

Я уверен, что вы можете поделиться ссылкой –

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