Ios 跨视图控制器保存信息
即使退出viewController,我也希望维护我的Ios 跨视图控制器保存信息,ios,swift,xcode,restore,Ios,Swift,Xcode,Restore,即使退出viewController,我也希望维护我的var removedIDs=[String]()。我已经为我的故事板中的所有恢复ID勾选了“使用故事板ID”。然而,当我离开viewController时,我仍然会丢失RemovedId的内容 在我的AppDelegate中,我写了: func application(_ application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool {
var removedIDs=[String]()
。我已经为我的故事板中的所有恢复ID勾选了“使用故事板ID”。然而,当我离开viewController时,我仍然会丢失RemovedId的内容
在我的AppDelegate中,我写了:
func application(_ application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool {
return true
}
func application(_ application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {
return true
}
在我的MainTextView(保存RemovedId的控制器)中,我有一个扩展名:
extension MainTextView {
override func encodeRestorableState(with coder: NSCoder) {
super.encodeRestorableState(with: coder)
coder.encode(removedIDs, forKey: "removed")
}
override func decodeRestorableState(with coder: NSCoder) {
func decodeRestorableState(with coder: NSCoder) {
super.decodeRestorableState(with: coder)
removedIDs = coder.decodeObject(forKey: "removed") as? [String] ?? []
}
}
}
我可以补充一点,removedIDs的内容是通过以下报告功能填写的:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let more = UITableViewRowAction(style: .default, title: "Report") { action, index in
self.removedIDs!.append(self.comments[indexPath.row].snap)
我缺少哪一部分恢复状态过程来允许Xcode保存我的ID?您试图做的是保存应用程序状态,而实际上需要保存一些应用程序数据。要做到这一点,你可以使用 例如,类似这样的事情:
var removedIds: [String]? {
get { return UserDefaults.standard.value(forKey: "removedIds") as? [String] }
set {
if newValue != nil {
UserDefaults.standard.set(newValue, forKey: "removedIds")
}
else {
UserDefaults.standard.removeObject(forKey: "removedIds")
}
}
}
public func add(removedId: String) {
guard var list = removedIds else { // Nothing saved yet
removedIds = [removedId] // Save array with 1 item
return
}
list.append(removedId) // Add new item
removedIds = list // Save
}
然后你可以:
add(removedId: self.posts[indexPath.row].id)
removedIds = [self.posts[indexPath.row].id]
var x = removedIds
removedIds = nil
我能问一下为什么你不把你的应用程序数据存储在本地数据库中吗?我很困惑,你想在杀掉应用程序后,还是只在运行应用程序时,才保存数据?@ShivamGaur我想在杀掉应用程序后,保留数据app@Scriptable这是一个很好的选择。如果这个解决方案不起作用,我会试试。我希望不需要将此数据存储在我的backend@EverythingEnds好的,这取决于现在,如果您只需要存储removeID,那么使用UserDefaults,因为UserDefaults用于存储属性列表类型,但是!如果您的项目需要存储更多数据,或者在将来的情况下需要存储更多数据,那么使用本地数据库。为了让您通过links/获得帮助,我尝试添加到我的ID:
add(removedIDs:self.comments[indexath.row].snap)
并使用了未解析的标识符“add”;你是说“rand”吗?
@everythingdsadd
是我在示例中定义的一个函数。您可以从同一个类中通过名称来调用它,但是如果您从另一个类调用它,当然需要使用适当的限定符来调用它。谢谢。它工作得很好。我不敢相信有这么简单的解决办法。