【问题标题】:How to save tableview data when moving from one view controller to another?从一个视图控制器移动到另一个视图控制器时如何保存表格视图数据?
【发布时间】:2020-03-20 18:50:09
【问题描述】:

从一个 View Controller 移动到另一个 View Controller 时如何在 tableview 中保存数据

当我退出应用程序或从视图控制器移动到视图控制器时,我试图让单元格保持不变在 CartVC 但仍然没有运气

旁注:我的 CartVC 中的单元格是从另一个视图控制器填充的,当在视图控制器中选择一个项目时,它会被传递到 CartVC 以填充单元格,每次我从一个 VC 移动到另一个(或关闭应用程序)CartVC 中的数据消失了我如何能够将数据保存在 CartVC 中

class CartViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    var selectedProduct: Items!

    var cart: [Cart] = []
    var groupedCartItems: [String: [Cart]] = [:]
    var brands: [String] = []

    @IBOutlet weak var cartTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.        

        groupedCartItems = Dictionary(grouping: cart, by: {$0.cart.dispensaryName})
        dispensarySectionTitle = groupedCartItems.map{$0.key}.sorted()

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        masterCartTableView.reloadData()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return brands.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let brand = brands[section]
        return groupedCartItems[brand]!.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cartCell = tableView.dequeueReusableCell(withIdentifier: "CartCell") as! CartCell        
        let brand = brands[indexPath.section]
        let itemsToDisplay = groupedCartItems[brands]![indexPath.row]
        cartCell.configure(withCartItems: itemsToDisplay.cart)

        return cartCell
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cartHeader = tableView.dequeueReusableCell(withIdentifier: "CartHeader") as! CartHeader       
        let headerTitle = brands[section]
        cartHeader.brandName.text = "Store: \(headerTitle)"

        return cartHeader
    }      
}

【问题讨论】:

  • 为此,您需要将数据保存在Coredata,Sqlite等本地数据库中。如果数据不是那么重,那么您也可以将其保存在用户默认值中。
  • 我使用 cloud firestore 作为我的数据库,@swapnil pate 我将如何使用 User default 暂时存储
  • 暂时可以将数组数据保存到User default中。
  • 我对如何使用用户默认设置有点困惑,因为我并没有真正习惯在我的代码中使用它们,最好的方法是什么?

标签: ios swift iphone uitableview


【解决方案1】:

如下保存你的数组:

let yourArray : [Any] = [] //Change your array type according to your requirement
UserDefaults.standard.setValue(yourArray, forKey: "your_key")

得到你的数组如下:

UserDefaults.standard.value(forKey: "your_key") //Get your array type according to you've saved before

【讨论】:

  • 我刚刚尝试运行它,当我将它放在 viewDidLoad 中时它没有在购物车中保存任何东西,当我把它放在 CellForAt 中时它使模拟器崩溃并跳转到应用程序委托
【解决方案2】:

如果你想保存数据,你可以使用用户默认值

保存在本地

let Defaults = UserDefaults.standard
Defaults.set(Yourvalue, forKey: "yourkey")
Defaults.synchronize()

使用

访问它
let yourvalueuset  =  UserDefaults.standard.string(forKey: "yourkey")

【讨论】:

  • 如果我要将它保存到我的“本地”,我会把它放在哪里? AppDelegate,cartVC
  • 我试着把它放在我的 viewDidLoad 它没有保存任何东西,我把它放在我的 cellFOrRowAt 也不走运,我该把它放在哪里让它工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多