2017-08-25 100 views
0

我以前問這個問題沒有任何運氣。我想創建一個tableview,在某段時間過後,單元格會過期。我已經能夠從頭開始創建60%的代碼,但是我面臨的問題是每當某行被刪除時,出於某種原因,它仍然被迭代,然後試圖再次被刪除。請參閱代碼。過期日期過後刪除tableview行

func handleDate(timer: Timer) { 


    DispatchQueue.main.async() { 

     if self.posts.count < 1 { 
      print("Empty") 
      timer.invalidate() 

     } else { 

        let calendar = Calendar.current 
        let date = Date() 

        let componentsCurrent = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date) 
        var components = DateComponents() 

        components.hour = componentsCurrent.hour 
        components.minute = componentsCurrent.minute 
        components.second = componentsCurrent.second 
        components.year = componentsCurrent.year 
        components.month = componentsCurrent.month 
        components.day = componentsCurrent.day 
        let currentTime = calendar.date(from: components)! 
        print("CurrentTime", currentTime) 

       for post in self.posts { 



        let cellID = post.postID 
        let row = self.postsInFeed.index(of: cellID) 

        let endDate = TimeInterval(post.time) 


        print("CELLID", cellID) 

        if currentTime.timeIntervalSince1970 >= endDate { 


         DispatchQueue.main.async { 
          self.tableView.beginUpdates() 
          timer.invalidate() 

//       self.datesInFeed.removeFirst() 
          print(post.postID) 
          print("Deleting tableview row") 

          self.postsInFeed.removeFirst() 
          self.posts.removeFirst() 
          DataService.ds.REF_FEED.child(cellID).removeValue() 

          self.tableView.deleteRows(at: [IndexPath(row: row!, section: 0)] , with: UITableViewRowAnimation.fade) 
          self.tableView.endUpdates() 
          } 
         } else { 
          self.tableView.reloadRows(at: [IndexPath(row: row!, section: 0)], with: .none) 


         } 
        } 
       } 
      } 
     } 

該代碼處理刪除已過期,但通過我的數據的陣列進行迭代,並確定哪些日期已經過去了行。問題就出在這:(-KsP_CqeC65aWFTZzvzt 刪除的tableview行 -KsP_CqeC65aWFTZzvzt 刪除的tableview行 -KsP_CqeC65aWFTZzvzt 刪除的tableview行)

正如你看到的,我也可以找我的數據庫確認,後是刪除,但由於某種原因,它繼續迭代刪除的帖子,導致崩潰。任何幫助將提前感激。

+0

我不知道這是否會解決您的問題,但你應該把其他部分DispatchQueue.main.async塊以及 – 3stud1ant3

+0

@克里斯不強制拆包(排!)。如果價值不知何故,應用程序將崩潰。 –

+1

從你展示的內容來看,你看起來比你需要的複雜得多......你有'self.posts'和'self.postsInFeed'和'cellID'和'.deleteRows()'和雙''.removeFirst()'和'.removeValue()'和'.reloadRows()'和,和,... **哇!*我會建議:循環你的數據數組... ...刪除「已過期」...調用'tableView.reloadData()'。 – DonMag

回答

0

每個的UITableView得到計數和從某處數據(可以是一個字符串數組,訂閱e.t.c)。讓我們調用SourceArray。

你需要操作SourceArray按你的願望。從SourceArray中刪除需要從UITableView中刪除的值。

一旦你與操作完成後,調用[UITableView的實例] .reloadData()