【问题标题】:How to store and retrieve tabledata using userdefault Swift 4如何使用 userdefault Swift 4 存储和检索表数据
【发布时间】:2018-10-07 06:47:14
【问题描述】:

我的任务是用户data 使用strut 方法附加到items 数组并分配给tableView tableData array。在我的代码中,我在多个地方使用了 tableData 一些validations

现在,我的问题是,当我将 background 移动到 foreground 时,我可以看到我的表数据,但是如果我从 background 中删除应用程序,那么如果我打开我的 application,则有 @987654331 @表视图。所以,我需要明白。如何 tableData storeUserDeafult 然后 retrieve 加载 tableView 以避免 data 丢失。

// Array declaration
var items = [Item]()
var tableData = [Item]() 

public func documentPicker(_ controller: UIDocumentPickerViewController,didPickDocumentsAt urls: [URL]) {

    // Here I am getting user selected file url and its name from iCloud.
    // I skipped to paste here.

    // User picked file data appending into items array
    items.append(Item(url: bookurl, title: name))

    // Assign items data to tableData
    if let data = UserDefaults.standard.data(forKey:"items") {
        do {
            let itemsUser = try PropertyListDecoder().decode(Array<Item>.self, from: data)
                tableData = itemsUser
        } catch { print(error) }
    }
}  

// MARK - TABLE VIEW DELEGATIONS
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return self.tableData.count
}

// TableView data-load 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell
    let item = tableData[indexPath.row]
        cell.name_label.text = item.name
    }
   return cell
}

【问题讨论】:

  • 你在哪里从 userdefaults 获取?
  • 我们需要查看更多代码来了解您面临的问题。请分享更多您的代码。如果不是太大,最好是全班。
  • 请检查我在帖子@RakeshaShastri 中更新了我的代码
  • 您应该具有从该委托之外的用户默认值获取 tableData 的逻辑,最好是在您需要使用该数据填充表时调用的方法。当然,在那之后打电话给reloadData()
  • 对不起,我无法理解。你的意思是我需要在选择器文档委托之外维护这个 if let data = UserDefaults.standard.data(forKey:"items") {...} ? @RakeshaShastri

标签: ios swift uitableview nsuserdefaults


【解决方案1】:

对于上述情况,UserDefault 应该是picker delegationoutside。如果我们保持在viewDidload 和一些logic 之内,那么它会运作良好。

//Within ViewDidLoad
 if let data = UserDefaults.standard.data(forKey:"items") {
        do {
            let itemsUser = try PropertyListDecoder().decode(Array<Item>.self, from: data)
                tableData = itemsUser
        } catch { print(error) }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多