2016-07-01 37 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

儘管正在從服務器檢索數據,但它始終返回零。 –

相關問題