обновление таблицы и coredata - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть некоторые данные в основных данных, и я показываю их в виде таблицы.Я хочу обновить строку просмотра таблицы, когда нажимаю на ячейку.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            let cell = tableView.cellForRow(at: indexPath) as! ItemTableViewCell

            cell.starImage.image = UIImage(named: "Gray star icon")

            cell.selectionStyle = .none

            let context = coreData.persistentContainer.viewContext
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Item")

            do {
                let result = try context.fetch(request)
                let img = UIImage(named: "Gray star icon")
                for data in result as! [NSManagedObject] {

                    let data = img!.pngData() as NSData?

                    data?.setValue(data, forKey: "starImage")
                 }

            } catch {
                print("Failed")
            }

            coreData.saveContext()
            tableView.reloadData()
        }



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? ItemTableViewCell else {
        return UITableViewCell()
    }

    cell.itemName.text = itemCategoryNameArray[indexPath.row]
    cell.itemDescription.text = itemDescriptionArray[indexPath.row]
    cell.itemCategory.text = itemCategoryTypeArray[indexPath.row]
    cell.starImage.image = UIImage(data: itemStarArray[indexPath.row])
    cell.profileImage.image = UIImage(data: itemImageArray[indexPath.row])
    return cell
}

Но я получаю сообщение об ошибке, например: -

Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: '[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа для кода starImage.'

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Попробуйте это. здесь я только что собрал все записи из базовых данных по одному, а затем после выбора ячейки таблицы просмотра эти выбранные данные будут обновлены и сохранены в базовых данных, а изображение ячейки также будет обновлено.

// GET DATA FROM CORE DATA...
func fetchData() {
        let context = coreData.persistentContainer.viewContext
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Item")

            do {
                let result = try context.fetch(request)
                managedObjects = result as! [NSManagedObject] //managedObjects             is a global array for the table content
                tableView!.reloadData()

            } catch {
                print("Failed")
            }

   }

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            let cell = tableView.cellForRow(at: indexPath) as! ItemTableViewCell

            cell.starImage.image = UIImage(named: "Gray star icon")

            cell.selectionStyle = .none

            self.editData(with: self.managedObjects[indexPath.row], indexPath: indexPath)

    }

 func editData(with object: NSManagedObject, indexPath: IndexPath) {
        let img = UIImage(named: "Gray star icon")
        let data = img!.pngData() as NSData?
        (object as! Item).starImage = data
        coreData.saveContext()
        managedObjects[indexPath.row] = object
    }
0 голосов
/ 01 апреля 2019

Пожалуйста, объедините ваши имена переменных: в цикле есть две разные data переменные, которые вызывают путаницу и ошибку

Better

for item in result as! [NSManagedObject] {
   let data = img!.pngData() as? NSData
   item.setValue(data, forKey: "starImage")
}

Тем не менее, я рекомендую использовать более конкретные типы и создавать изображение только один раз

let request = NSFetchRequest<Item>(entityName: "Item")

do {
    let result = try context.fetch(request)
    let img = UIImage(named: "Gray star icon")
    let data = img!.pngData() as? NSData
    for item in result {
       item.starImage = data
    }
} catch {
    print("Failed", error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...