2017-08-25 99 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()