2016-07-07 71 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,并且能够看到我的文本!