UILabel没有在Swift 2中更新

时间:2016-07-07 22:41:54

标签: ios swift api parsing

我遇到了一个问题,我正在从API解析一个String值,我正在尝试将其分配给UILabel。我已经通过使用以下格式将标签(lblNamedata)设置为String来测试更新标签的位置与现在完全相同:

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我可以看到我的标签更新......为什么会这样?

1 个答案:

答案 0 :(得分:0)

好吧,经过多次试错后,我想我找到了答案。

我的Main.storyboard中出现了一些不喜欢我在UILabel中创建多行的东西,所以我所做的就是点击标签并导航到Attributes Inspector。我将“Lines”参数设置为0,我能够看到我的文字!