swift: не работало обновление/перезагрузка представления таблицы

я новичок в быстрой разработке, я добавил данные на сервер, попытался обновить tableviewcontroller с помощью функции refreshcontrol, но значение в табличном представлении не изменилось.

класс 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 refreshData(){

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

        self.sosTableView.reloadData()
    }

    refreshControl?.endRefreshing()

}

функция загрузки сервера

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



}

person Aldo Lazuardi    schedule 30.10.2015    source источник
comment
Можете ли вы также предоставить реализацию протокола UITableViewDataSource? Я имею в виду tableView:cellForRowAtIndexPath: и tableView:numberOfRowsInSection: методы   -  person iyuna    schedule 31.10.2015
comment
эй @Iyuna, я только что добавил источник данных табличного представления, который ты просил. в любом случае данные обновляются только в том случае, если я повторно запускаю приложения. благодарю вас   -  person Aldo Lazuardi    schedule 31.10.2015


Ответы (1)


Хорошо, я только что понял, что вы наследуете UITableViewController, поэтому у вас уже есть унаследованное от него свойство tableView. Представление таблицы из этого свойства уже установило делегат и источник данных для вашего контроллера, но не для вашего пользовательского sosTableView. Вы должны заменить свой собственный sosTableView унаследованным свойством tableView, и тогда все будет работать так, как вы ожидаете.

person iyuna    schedule 31.10.2015
comment
Да, это то, что я хочу, что мне делать? - person Aldo Lazuardi; 01.11.2015
comment
извините, я не понимаю, поэтому мне нужно отключить эталонные выходы «sosTableView» от раскадровки и превратить sosTableView.reloadData в данные tableView.reload? @Июна - person Aldo Lazuardi; 01.11.2015
comment
Вы можете сделать одно из следующего: • удалить sosTableView вообще и использовать во всех случаях свойство tableView (также подключить свойство tableView к табличному представлению в раскадровке, если оно еще не подключено) • установить в раскадровке делегата sosTableView и dataSource на ваш MainTableViewController - person iyuna; 01.11.2015
comment
Какой вариант вы пробовали? - person iyuna; 02.11.2015
comment
В порядке. Не могли бы вы поделиться своим кодом с GitHub или кем-то еще, чтобы я мог проверить, все ли вы сделали правильно? - person iyuna; 02.11.2015