2016-07-01 38 views
0

我的Swift应用程序,我需要在tableview中显示数据。服务器端的数据经常变化,因此我需要删除以前的任何数据并添加新获取的数据。我能够删除和获取,我可以在控制台以及领域浏览器中看到新数据。但是,结果中表格视图控制器中的数据不可用。删除,添加和显示数据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

您是否设置了'tableView'的'delegate'&'dataSource'属性? – Santosh

回答

0

我解决(我应该说,我哑)如下: -

FetchData方法具有一个回调success,其在示例中,我使用的显示器的警报。

我在tableViewController中创建了另一个函数,并在调用success时调用了这个函数。在我称之为self.tableView.reloadData()的新方法中。

感谢所有帮助我

0

我的猜测是您需要从本地“serviceSubCategory”中删除对象,而不仅仅是从服务器。

每次服务器侦听器触发时都放一个tableView.reloadData()

可能在fetchSubCategories()deleteSubCategories()功能。

+0

将'tableView.reloadData()'添加到'fetchSubCategories()'不起作用并将其添加到'deleteSubCategories()'抛出'致命错误:意外地发现nil,同时在'return self.serviceSubCategories!.count中展开可选值' –

+0

在函数numberOfRowsInSection中,执行以下操作:if self.serviceSubCategories!= nil {return self.servicesSubCategories.count} else {return 0} – Aylii

+0

尽管正在从服务器检索数据,但它始终返回零。 –

相关问题