Almofire之后的swift 2 UITableView刷新

时间:2016-04-26 15:14:12

标签: swift uitableview

我知道almofire在背景中作为一个线程工作,所以我放入了我的主要课程

let nc = NSNotificationCenter.defaultCenter()
        nc.addObserver(self, selector: "taskdataReadyFunc", name: "taskdataReady", object: nil)

并在almofire完成后的dataClass中:

init() {
        Alamofire.request(.GET, urlString, parameters: parameters).responseJSON { response in
            if response.result.isSuccess {
                let json = JSON(response.result.value!)
                let data = json.arrayValue
                self.tasks = data 

                print(self.tasks)

            }
      //  print(self.tasks)
           print(String(self.tasks.count)+"before nc")
            let nc = NSNotificationCenter.defaultCenter()
            nc.postNotificationName("taskdataReady", object: nil)

        }

导致了这个功能:

func taskdataReadyFunc (){


        tableView.reloadData()
        print("reload mision table" + String(taskDataClass.sharedInstance.tasks.count))

    }

第一次启动应用程序时,此工作正常。 我的问题是我做了一个新任务,向数据库添加一个新任务,然后再次尝试运行dataClass的init。在那个阶段,我可以看到来自数据库的新任务,但它没有使表重新加载数据。(如果我关闭并打开应用程序,我看到它) 如何刷新我的表格视图,或者从一开始就关闭并打开控制器?

2 个答案:

答案 0 :(得分:0)

我不确定您要对self.tasks = data做什么,但正常的Alamofire用法与NSNotification结合使用会如下所示:

request(.GET, urlString, parameters: parameters).responseJSON { response in
    guard let json = response.result.value else { return } // handle error

    let notification = NSNotification(name: "taskDataReady", object: nil, userInfo: ["taskData" : json])
    NSNotificationCenter.defaultCenter().postNotification(notification)
}

然后,您将从通知中解开JSON值。我实际上建议将ASON解码为Alamofire完成处理程序中的实际类型并将其封装在NSNotification中,这样您就不必在视图控制器中执行其他工作。

答案 1 :(得分:-1)

首次调用sharedInstance时,只创建一次。 它叫做singleTon。 这意味着如果init()函数填充类中的变量,则sharedInstance将不会更新。

所以,在init类中,即使在第一次运行时也更新sharedInstance而不是变量。 例如:

//self.tasks = data

taskDataClass.sharedInstance.tasks = data