自动删除UITableView中的行:Swift3

时间:2017-08-14 04:59:46

标签: swift uitableview

我有一个UITableView,其中包含根据他们何时进入我的数据库时间戳的帖子行。我希望在经过一定时间后自动删除每个单元格的帖子(行)。目前,这就是我实现这一目标的目的:

func deletePost(timer: Timer) {
    for post in posts {
        let startTime = Date(timeIntervalSince1970: TimeInterval(post.time))
        let date = Date()
        let endTime = startTime + 25
        let call = Calendar.current


        let componentsCurrent = call.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 = call.date(from: components)!
        print(currentTime)
        print(" 2" , endTime)

        if  currentTime.timeIntervalSince1970 == endTime.timeIntervalSince1970 {
            timer.invalidate()
            print("ENDDDDD")
            posts.removeLast()
            tableView.reloadData()
                    }
                }
            }

我看到的问题是当前日期只记录一次但不会继续更新。我查看了有关计时器的其他帖子,我已经实现了它们但是它在这种情况下没有工作。我假设一旦我能让这些变量等于其他代码就会直截了当。

2 个答案:

答案 0 :(得分:1)

cellForRowAt不适合任何类型的逻辑。其唯一目的是提供所请求的单元格。这就是全部。

你想要的是设置一个计时器,比如每分钟一次(或其他一些适当的时间跨度)。当计时器关闭时,扫描数据源以查找应删除的行。从数据源中删除相应的值,并使用deleteRows传递与已删除条目对应的IndexPath数组,相应地更新表视图。

答案 1 :(得分:0)

您的代码将检查是否只有在您的tableView为
时才删除某些内容 ZoneId

reloadingData();

您应该从 //That's not good, because `cellForRow` //is called as many times as this method returns override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count; } 删除数据,然后拨打array

要在特定时间执行此操作,您可以:

tableView.reloadData();

并在viewWillAppear中查看此时间。

或者你可以像rmaddy说的那样制作一个计时器。