Ios 跨视图控制器保存信息

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 {

即使退出viewController,我也希望维护我的
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
}
然后你可以:

  • 将项目添加到存储ID的列表中:

    add(removedId: self.posts[indexPath.row].id)
    
  • 您还可以覆盖以下列表:

    removedIds = [self.posts[indexPath.row].id]
    
  • 获取以前保存的已删除ID的列表:

    var x = removedIds
    
  • 已从存储中删除所有ID:

    removedIds = nil
    

  • 我能问一下为什么你不把你的应用程序数据存储在本地数据库中吗?我很困惑,你想在杀掉应用程序后,还是只在运行应用程序时,才保存数据?@ShivamGaur我想在杀掉应用程序后,保留数据app@Scriptable这是一个很好的选择。如果这个解决方案不起作用,我会试试。我希望不需要将此数据存储在我的backend@EverythingEnds好的,这取决于现在,如果您只需要存储removeID,那么使用UserDefaults,因为UserDefaults用于存储属性列表类型,但是!如果您的项目需要存储更多数据,或者在将来的情况下需要存储更多数据,那么使用本地数据库。为了让您通过links/获得帮助,我尝试添加到我的ID:
    add(removedIDs:self.comments[indexath.row].snap)
    并使用了
    未解析的标识符“add”;你是说“rand”吗?
    @everythingds
    add
    是我在示例中定义的一个函数。您可以从同一个类中通过名称来调用它,但是如果您从另一个类调用它,当然需要使用适当的限定符来调用它。谢谢。它工作得很好。我不敢相信有这么简单的解决办法。