swift:刷新/重新加载表视图没有工作

问题描述:

我是新的swift开发,我添加了数据在服务器试图刷新tableviewcontroller refreshcontrol功能,但表视图中的值没有改变。swift:刷新/重新加载表视图没有工作

类MainTableViewController:的UITableViewController,UINavigationControllerDelegate {

@IBOutlet var sosTableView: UITableView! 

var datas = [dataSos]() 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    spinningActivity.labelText = "Loading" 
    spinningActivity.detailsLabelText = "Please wait" 
    dispatch_async(dispatch_get_main_queue()) { 
     self.loadDataServer() 
     spinningActivity.hide(true) 
     self.sosTableView.reloadData() 
    } 


    //loadDataSos() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

    var refreshControl = UIRefreshControl() 
    refreshControl.addTarget(self, action: Selector("refreshData"), forControlEvents: UIControlEvents.ValueChanged) 
    self.refreshControl = refreshControl 
} 

刷新FUNC

func refreshData(){ 

    dispatch_async(dispatch_get_main_queue()) { 
     self.loadDataServer() 

     self.sosTableView.reloadData() 
    } 

    refreshControl?.endRefreshing() 

} 

负载服务器FUNC

func loadDataServer(){ 

    do { 

     let data = NSData(contentsOfURL: NSURL(string: "http://xxxx/scripts/xxx.php")!) 

     let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 




     //let NumberOfPersons = jsonResult.count 

     // **LOOP THROUGH THE JSON ARRAY** 
     for anItem in jsonResult as! [Dictionary<String, AnyObject>] { 
      let userId = anItem["userId"] as! String 
      let userName = anItem["firstName"] as! String 
      let userAddress = anItem["address"] as! String 
      let userDate = anItem["date"] as! String 
      let userLocation = anItem["location"] as! String 
      var userEvent = anItem["event"] as? String 
      let sosId = anItem["sosId"] as! String 
      // do something with personName and personID 


      let imageUrl = NSURL(string:"http://xxx") 
      let imageData = NSData(contentsOfURL: imageUrl!) 


      if userEvent == nil{ 
       userEvent = "Need Help" 

      }else if userEvent! == "1" { 
       userEvent! = "Thief" 
      } 
      else if userEvent! == "2" { 
       userEvent! = "Fire" 
      } 
      else{ 
       userEvent! = "Healthy Issue" 
      } 



      //print(personName) 
      if imageData == nil{ 
       let photo1 = UIImage(named: "defaultPhoto")! 
       let data1 = dataSos(userId: userId, name: userName, location: userLocation, address: userAddress, event: userEvent!, date: userDate, photo: photo1, sosId: sosId) 
       self.datas += [data1] 
      } 
      else{ 
      let photo1 = UIImage(data: imageData!) 
      //let photo1 = UIImage(named: "defaultPhoto") 
       let data1 = dataSos(userId: userId, name: userName, location: userLocation, address: userAddress, event: userEvent!, date: userDate, photo: photo1, sosId: sosId) 

      self.datas += [data1] 
      } 
     } 






    } catch let error as NSError { 

     print(error) 

    } 
    // } 
} 

更新:表视图数据源

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // warning Incomplete implementation, return the number of rows 
    return datas.count 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cellIdentifier = "cell" 

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MainTableViewCell 

    // Configure the cell... 
    let data0 = datas[indexPath.row] 

    cell.nameLabel.text = data0.name 
    cell.locationLabel.text = data0.location 
    cell.addressTextView.text = data0.address 
    cell.eventLabel.text = data0.event 
    cell.dateLabel.text = data0.date 
    cell.photoLabel.image = data0.photo 
    self.roundingUIView(cell.photoLabel, cornerRadiusParam: 35) 


    return cell 



} 
+0

你还可以提供你的UITableViewDataSource协议实现吗?我的意思是tableView:cellForRowAtIndexPath:和tableView:numberOfRowsInSection:方法 – iyuna

+0

hey @Iyuna,我刚刚添加了表格视图数据源,你问。无论如何数据只更新,如果我重新运行的应用程序。谢谢 –

好吧,我只是明白,你继承了的UITableViewController,为此你已经拥有的tableView财产继承它。此属性的表视图已将delegate和dataSource设置为您的控制器,但不是您的自定义sosTableView。你应该用继承的tableView属性替换你的自定义sosTableView,然后一切都会按照你的预期工作。

+0

是的,这就是我想要的,我该怎么办? –

+0

对不起,我没有得到它,所以我需要从故事板中断开'sosTableView'的引用网点并将sosTableView.reloadData转换为tableView.reload数据? @Iyuna –

+0

您可以执行下列操作之一: •所有删除sosTableView,并在所有情况下的tableView财产故事板使用(也的tableView属性连接到您的表视图中的故事板,如果它尚未连接) •设置sosTableView的委托和数据源到您的MainTableViewController – iyuna