Как хранить и извлекать табличные данные, используя userdefault Swift 4 - PullRequest
0 голосов
/ 07 октября 2018

Моя задача - пользователь data, добавляющий в массив items метод strut и назначающий tableView tableData array.В моем коде несколько мест я использовал tableData для некоторых validations.

Теперь моя проблема в том, что я могу видеть данные своей таблицы, когда я перемещаю background в foreground, но если я удаляю приложение из background затем снова Если я открою свой application, есть empty tableView.Итак, мне нужно понять.как tableData store в UserDeafult и затем 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
}

1 Ответ

0 голосов
/ 08 октября 2018

Для приведенного выше сценария UserDefault должно быть outside из picker delegation.Если мы будем поддерживать 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) }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...