2016-07-07 72 views
1

我遇到了一個問題,我正在解析API的字符串值,並且試圖將它分配給UILabel。我已經測試的確切相同的位置更新標籤,因爲它是現在使用的格式標籤(lblNamedata)設置爲一個字符串:UILabel沒有在Swift 2中更新

self.lblNameData.text = "hello" 

,它一直很好。

我目前有:

if success { 
     print("parse success!") 

     print(strXMLData) 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.lblNameData.text=self.strXMLData 
     }) 

    } else { 
     print("parse failure!") 
    } 

,這是行不通的。

下面是我的完整當前的代碼:

import UIKit 

class ViewController: UIViewController,NSXMLParserDelegate { 

    var strXMLData:String = "" 
    var currentElement:String = "" 
    var passData:Bool=false 
    var passName:Bool=false 
    var parser = NSXMLParser() 


    @IBOutlet weak var lblNameData: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let url:String="http://www.stands4.com/services/v2/quotes.php?uid=idhere&tokenid=tokenhere&searchtype=xxxx&query=xxxx" 

     let urlToSend: NSURL = NSURL(string: url)! 
     // Parse the XML 
     parser = NSXMLParser(contentsOfURL: urlToSend)! 
     parser.delegate = self 

     let success:Bool = parser.parse() 

     if success { 
      print("parse success!") 

      print(strXMLData) 

      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       self.lblNameData.text=self.strXMLData 
      }) 

     } else { 
      print("parse failure!") 
     } 
    } 

    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
     currentElement=elementName; 
     if(elementName=="quote" || elementName=="author" || elementName=="result") 
     { 
      if(elementName=="quote"){ 
       passName=true; 
      } 
      passData=true; 
     } 
    } 

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
     currentElement=""; 
     if(elementName=="quote" || elementName=="author" || elementName=="result") 
     { 
      if(elementName=="quote"){ 
       passName=false; 
      } 
      passData=false; 
     } 
    } 

    func parser(parser: NSXMLParser, foundCharacters string: String) { 
     if(passName){ 
      strXMLData=strXMLData+"\n\n"+string 
     } 

     if(passData) 
     { 
//   print(string) 
      print("work") 
     } 
    } 

    func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) { 
     NSLog("failure error: %@", parseError) 
    } 
} 

更新:所以,我認爲我找到了錯誤:在我分析器功能我設置strXMLData = strXMLData +「\ n \ n」 +字符串,但後我刪除\ n \ n我可以看到我的標籤更新...爲什麼會這樣?

+0

它打印什麼'print(strXMLData)'?這是'dispatch_async'之前 – Santosh

+0

該特定語句從我的API中打印出一個引用,例如'如果你想完成你的生活目標,你必須從聖靈開始。 Oprah Winfrey'但是,我意識到如果我打印出UILabel的價值,它會給我'可選的(「\ n \ n)如果你想完成你生活的目標,你必須從聖靈開始。 n \ nOprah Winfrey「)' –

+0

查看原文我的更新... –

回答

0

好的,所以在經歷了許多反覆試驗之後,我想我找出了答案。

在我的Main.storyboard中出現了一些不喜歡我在UILabel中創建多行的東西,所以我所做的只是點擊標籤並導航到Attributes Inspector。我將「Lines」參數設置爲0,並且能夠看到我的文本!