我以前问这个问题没有任何运气。我想创建一个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行)
正如你看到的,我也可以找我的数据库确认,后是删除,但由于某种原因,它继续迭代删除的帖子,导致崩溃。任何帮助将提前感激。
我不知道这是否会解决您的问题,但你应该把其他部分DispatchQueue.main.async块以及 – 3stud1ant3
@克里斯不强制拆包(排!)。如果价值不知何故,应用程序将崩溃。 –
从你展示的内容来看,你看起来比你需要的复杂得多......你有'self.posts'和'self.postsInFeed'和'cellID'和'.deleteRows()'和双''.removeFirst()'和'.removeValue()'和'.reloadRows()'和,和,... **哇!*我会建议:循环你的数据数组... ...删除“已过期”...调用'tableView.reloadData()'。 – DonMag