2016-08-26 8 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で表示したいとします。テーブルビューでその名前を表示したいと思います。今私はこれからのデータを取得していません。まず第一にすべてのデータを取得し、それから私たちは任意のformateで変換または整理することを考えることができますが、私は何も得ていません。誰でも同じことを助けてください。XMLデータを適切なformateで取得して、Swiftのテーブルビューに表示しない

答えて

0

編集:

ああ!私はあなたのXMLを徹底的にチェックしませんでした!実際には、データを非同期にロードするパーサとは何の関係もありません(ただし、リフレッシュ機能を実装すると、元のヒントはparserDidEndDocumentとなります)。

正しい名前、つまり要素の文字列を使用していないことが分かります。 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

(そうでない場合は、あなたがそれで醜いプレフィックスを取得する可能性があります、私は少し文字列を取得する方法を変更注意してください)parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)

... 
     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") 
... 

:ここで修正されたコードです

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

parser(parser: NSXMLParser, foundCharacters string: String)私は基本的に、あなたは要素が実際には、要素の名前です特定し、それらの文字列キーを認識していなかったと仮定し

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

(あなたは改行とあなたのXMLでのいくつかの空白を持っているように見えるに注意し、私はそれをカットオフ) 。あなたのコードにはいくつかの小さなものがあります。例えば、varを初期化する必要はありません。実際に使用する前に別の場所に再設定するだけで、変数の名前も変更することができます) 。

あなたが提供したリンクで試してみましたが、現在は動作しています。前の回答の

要旨:あなたは、パーサーが解析を終えた後、テーブルのデータをリロードすることが保証されるように

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

を実装します。

+0

私のコードを編集しました。今すぐあなたは適切なアイデアを得るでしょう。データを取得しないことについて –

+0

あなたがしたいのであれば、あなたのコードで小さな事を示すgit repoを与えることもできます。 – Gero

+0

本当にあなたはリンクを共有することができます –

関連する問題