ios - 从 UITableViewController 重新加载 tableView

标签 ios swift xcode6 tableview

我正在尝试从 UItableViewController 重新加载我的 tableView,但它不工作。 这是我得到的歌曲列表:

func request(params:[String])
{
    //soap envelop here with list of parameters reqquested
}

func response(response responseData: NSMutableData)
{
    var error: NSError?
    if let xmlDoc = AEXMLDocument(xmlData: responseData, error: &error)
    {
        respCode=xmlDoc.root["soap:Body"]["\(methodName)Response"]["\(methodName)Result"]["_jResponseCode"].value!.toInt()!
        var dictData:AEXMLElement = xmlDoc.root["soap:Body"]["\(methodName)Response"]["\(methodName)Result"]["_objResponse"]["_structConcertDetails"]
        ConcertDetails.sConcertName = dictData["sConcertName"].value!
        ConcertDetails.sConcertOrganiserName = dictData["sConcertOrganiserName"].value!
        ConcertDetails.sConcertVenue = dictData["sConcertVenue"].value!
        ConcertDetails.sPlaylistCreatedBy = dictData["sPlaylistCreatedBy"].value!
        ConcertDetails.sPlaylistName = dictData["sPlaylistName"].value!
        var songList:AEXMLElement = dictData["aStructSongDetails"]
        for var i:Int = 0; i < songList.children.count; i++
        {
            var songXML:AEXMLElement = songList.children[i]
            var structSong:structSongDetails = structSongDetails()
            structSong.sSongsName = songXML["sSongsName"].value!
            structSong.suidSong = songXML["suidSong"].value!
            structSong.sSongArtist = songXML["sSongArtist"].value!
            ConcertDetails.SongList.append(structSong)
        }
        pageTarget?.serviceResponse(self)
    }
}

我在这里调用它:

override func viewDidLoad() {
    super.viewDidLoad()
    navHeight = self.navigationController?.navigationBar.frame.height
    statusHeight = UIApplication.sharedApplication().statusBarFrame.height
    addSongRequestTimerLabel()
    soapObject = GetConcertDetails()
    soapObject.request(["B54f22899a5712b3efb2ec191101b2f917"])
    soapObject.pageTarget = self
    var connector: WSSoapConnector = WSSoapConnector()
    connector.callAPI(soapObject)

这是自定义 API:

protocol _IFaceAPI
{
    var methodName: String {get}
    var pageTarget: _IFaceCallTarget? {get set}
    var soapEnv: String {get set}
    var respCode: Int {get set}
    func request(params:[String])
    func response(response responseData: NSMutableData)
}

我正在像这样在服务响应中重新加载 tableView:

func serviceResponse(target: _IFaceAPI)
{
    self.tableView.reloadData()
}

reloadData 不工作。我收到了 songList 数组中所有 200 首歌曲的正确响应。但是当我运行应用程序时,桌面上什么也没有显示。无论是在模拟器中还是在我的 iPhone 6 上

更新 TableView 的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("songListItem") as! UITableViewCell
    if self.soapObject.ConcertDetails.SongList[indexPath.row].checkValue == 1
    {
        cell.accessoryType = .Checkmark
        cell.backgroundColor = UIColor.lightGrayColor()
        cell.userInteractionEnabled = false
    }
    else
    {
        cell.accessoryType = .None
    }
    cell.textLabel?.text = self.soapObject.ConcertDetails.SongList[indexPath.row].sSongsName + "-" + self.soapObject.ConcertDetails.SongList[indexPath.row].sSongArtist
    // Configure the cell...

    return cell

最佳答案

UI 应该只从主线程更新:

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

否则没有阻塞

self.tableView.reloadData()

关于ios - 从 UITableViewController 重新加载 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890814/

相关文章:

XCode6:接收错误 "Include of non-modular header inside framework module"

ios - AHEasing 是否在 Swift 中运行?

ios - 如何动画 UIBarButtonItem 从左侧在 UIToolbar 上滑动?

ios - 从不同的 View Controller 打开相同的 View

linux - 如何在 Linux 上使用 swift 在 CFString 和 String 之间进行转换

ios-simulator - IOS 8 模拟器无法启动

ios - Swift:按钮圆角打破约束

iphone - ViewController 在我退出并重新启动应用程序之前不会显示

ios - 在 Storyboard中使用 Xib 时,Xib 的 IBOutlets 返回 nil

xcode 6 - 更改默认启动屏幕显示时间