2016-07-01 3 views
0

Im мое приложение Swift, мне нужно отображать данные в виде таблицы. Данные на стороне сервера часто меняются, поэтому мне нужно удалить любые предыдущие данные и добавить новые данные. Я могу удалить и извлечь, и я могу видеть новые данные в консоли, а также в браузере реального мира. Однако данные недоступны в контроллере табличного представления из результатов.Удалить, добавить и отобразить данные swift table view controller

class ServiceProvidersTableViewController: UITableViewController {  
    // MARK: - Data Source 
    var serviceSubCategory: String = "" 
    var serviceSubCategories: Results<ServiceSubCategory>? 

    // MARK: - Realm 
    let realm = try! Realm() 
    let fetchData = FetchData() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.deleteSubCategories() 

     FetchData.get(ServiceSubCategory.self, params: ["subCategoryId": serviceSubCategory], success: {    
      self.infoAlert("Service Categories", message: "Fetch Successful") 
     }) { 
      self.infoAlert("Failed", message: "Fetch Failed") 
     } 
     self.fetchSubCategories() 
    } 

    func deleteSubCategories() 
    { 
     let subCategories = realm.objects(ServiceSubCategory.self) 
     print("Before delete \(subCategories)") 
     try! realm.write{ 
      realm.delete(subCategories) 
     } 
     print("After delete \(subCategories)") 
    } 

    func fetchSubCategories() { 
     self.realm.refresh() 
     self.serviceSubCategories = self.realm.objects(ServiceSubCategory) 
     tableView.reloadData() 
     print("After fetch \(self.serviceSubCategories)") 
    } 

    struct Storyboard { 
     static let CellIndentifier = "ServiceProvidersCell" 
    } 


    // 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 
     print(self.serviceSubCategories!.count) 
     return self.serviceSubCategories!.count 


    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier(Storyboard.CellIndentifier, forIndexPath: indexPath) as! ServiceProvidersTableViewCell 
     print(serviceSubCategories) 
     cell.serviceSubCategories = self.serviceSubCategories![indexPath.row] 
     return cell 
    } 

    func infoAlert(title:String,message:String) -> Void { 
     let actionSheetController: UIAlertController = UIAlertController(title:title, message:message, preferredStyle: .Alert) 
     let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in } 
     actionSheetController.addAction(cancelAction) 
     self.presentViewController(actionSheetController, animated: true, completion: nil) 
    } 
} 
+0

сделали вы называете 'tableView.reloadData()', когда ваши новые результаты? – Santosh

+0

Да, я следую руководству по адресу https://blog.hyphe.me/realm-and-alamofire-in-a-effective-harmony/. Как проверить новые результаты? –

+0

Вы задали свойства 'delegate' &' dataSource' 'tableView'? – Santosh

ответ

0

Я решил (я должен сказать, что я тупой) следующим образом: -

FetchData Метод имеет функцию обратного вызова success, который в этом примере я использовал отображает предупреждение.

Я создал другую функцию в tableViewController и вызвал ее в обратном вызове success. Внутри нового метода я назвал self.tableView.reloadData().

Спасибо всем за помощь мне

0

Я полагаю, что вам нужно удалить объект из локальной «serviceSubCategory», а не только с сервера.

Положите tableView.reloadData() каждый раз, когда происходит прослушивание сервера.

Возможно, в функциях fetchSubCategories() и deleteSubCategories().

+0

добавление 'tableView.reloadData()' to 'fetchSubCategories()' не влияет и добавляет его в 'deleteSubCategories()' throws 'фатальная ошибка: неожиданно найден nil при распаковке необязательного значения' в 'return self.serviceSubCategories! .count ' –

+0

В функции numberOfRowsInSection выполните следующее: if self.serviceSubCategories! = Nil {return self.servicesSubCategories.count} else {return 0} – Aylii

+0

Это всегда возвращает ноль, хотя данные извлекаются с сервера. –

Смежные вопросы