我有一个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()
}
}
}
我看到的问题是当前日期只记录一次但不会继续更新。我查看了有关计时器的其他帖子,我已经实现了它们但是它在这种情况下没有工作。我假设一旦我能让这些变量等于其他代码就会直截了当。
答案 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说的那样制作一个计时器。