2016-08-26 45 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的結果。我想在表格視圖中顯示它的名字。現在我沒有收到任何數據。首先如果能得到任何數據,然後我們可以考慮轉換或安排在任何一個合作伙伴,但我沒有得到任何東西。任何人都可以爲此提供幫助。沒有獲取適當的合成格式的XML數據以在Swift的Table View中顯示

回答

0

編輯:

哦!我沒有徹底檢查你的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倉庫,向你展示你的代碼中的小事情。 – Gero

+0

你確定你可以分享鏈接 –

相關問題