我以前問這個問題沒有任何運氣。我想創建一個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