【发布时间】:2020-05-07 04:48:35
【问题描述】:
我想在 TableView 中跟踪已完成的主题列表
我已设置委托,确认 tableView 主题标记为已完成
protocol TopicDetialVCDelegate: class {
func hasBeenCompletedTopic()
}
TableViewVC
func hasBeenCompletedTopic() {
isPerformedDelegate = true
if !completedTopicIdArray.contains(completedTopicId) {
completedTopicIdArray.append(completedTopicId)
}
print("completed Topics \(completedTopicIdArray)")
print("TopicVC: Completed Topics total: \(completedTopicIdArray.count)")
}
这是可行的,但我想坚持始终将已标记的标记为已完成
这是 CellForRowAt 的代码
if isPerformedDelegate {
for _ in 0...completedTopicIdArray.count {
if completedTopicIdArray.contains(filteredTopicArray[indexPath.row].id!) {
cell.topicCompletedTickImageView.image = #imageLiteral(resourceName: "Tick")
}
}
}
我想要什么
应该有一个数组来获取所有已完成的主题 idz,并在每次运行应用程序时检查单元格索引路径是否包含 topicID 显示 Tick 图像
我可以像这样使用 UserDefaults
UserDefaults.standard.set(array, forkey: "abc")
但问题是数组将在应用程序再次运行时重新初始化
就像在 ViewWillDisappear 中一样
override func viewWillDisappear(_ animated: Bool) {
UserDefaults.standard.set(completedTopicIdArray, forKey: "completedTopics")
UserDefaults.standard.synchronize()
}
在 ViewDidLoad 中访问
let topics = UserDefaults.standard.array(forKey: "completedTopics")
print(topics as? [Int] ?? [Int]())
【问题讨论】:
-
UserDefaults 并不是用于简单设置(顾名思义)之外的任何事情的最佳数据存储。你应该看看像 Core Data 这样的东西;然后,您将存储许多
Topic实体,每个实体都有一个isCompletedbool 属性。但是,您的问题似乎是在应用启动时如何从用户默认值加载数据 - 您可以显示该代码吗? -
你在哪里得到/设置
completedTopicIdArray到UserDefaults? -
@TraiNguyen 在 ViewWillAppear 和 ViewWillDisappar 中
-
@Paulw11 这是我在问如何持久化数据,我可以在应用程序启动时访问,它是一个数组,因此我举了一个 UserDefaults 的例子。无论如何,所以我应该使用主题 id 和 iscompleted bool 类型创建一个实体?
-
@UmerKhan 您可以将带有加载/保存
completedTopicIdArray的源代码发布到 UserDefaults 吗?
标签: ios swift uitableview tableview