2016-11-05 1 views
-1

Я создал сегодня расширение, содержащее tableView с пользовательскими ячейками, и заполнил эту таблицу данными с сервера. Теперь, когда веб-служба вызывается для обновления данных и данных таблицы, необходимо перезагрузить, данные из таблицы исчезают. Короче каждый раз, когда я переключаюсь с панели «Сегодня» на панель «Уведомление» и обратно, данные в таблице исчезают. Ниже приведен код моего контроллера.Данные пользовательской ячейки Swift TableView исчезают после перезагрузки таблицы в виджетах Сегодня

TodayViewController.swift:

import UIKit 
import NotificationCenter 

class TodayViewController: UIViewController, NCWidgetProviding, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    var key : [String]=[String]() 

    var value: [String]=[String]() 


    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 




    override func viewDidLoad() { 
     super.viewDidLoad() 



     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      print("This is run on the main queue, after the previous code in outer block") 
      self.callUrl() 
      self.tableView.reloadData() 
     }) 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     print(key.count) 
     return key.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell=self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!CustomCell 

     cell.key.text=key[indexPath.row] 
     cell.value.text=value[indexPath.row] 
     cell.setNeedsLayout() 
     return cell 

    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    } 

    func callUrl(){ 

      let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")! 
     let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithRequest(urlRequest) { 
      (data, response, error) -> Void in 

      let httpResponse = response as! NSHTTPURLResponse 
      let statusCode = httpResponse.statusCode 

      if (statusCode == 200) { 
       print("Everyone is fine, file downloaded successfully.") 
       self.key.removeAll() 
       self.value.removeAll() 

       do{ 

        let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 

        if let stations = json["stations"] as? [[String: AnyObject]] { 

         for station in stations { 

          if let name = station["stationName"] as? String { 

           if let year = station["buildYear"] as? String { 


            self.key.append(name) 
            self.value.append(year) 
           print(self.key) 
           } 

          } 
         } 

        } 

       } 

       catch { 
        print("Error with Json: \(error)") 
       } 

      } 
     } 



     task.resume() 

    } 


    func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 

      self.callUrl() 
      self.tableView.reloadData() 
     }) 

      completionHandler(NCUpdateResult.NewData) 
    } 

} 

Таблица с данными:

Table with data

Таблица без данных:

Table without data

Я новичок в ios и быстро. Любая помощь будет здорово! Благодарю.

ответ

0

вы должны перезагрузить табличное представление в блоке успеха метода callURL().

+0

Спасибо. но теперь, когда представление загружается изначально, а затем его пустое. Какие-нибудь предложения здесь? – user7117894