Сохраните несколько массивов, которые содержат один и тот же базовый объект данных - PullRequest
0 голосов
/ 16 ноября 2018
var done = [Item]()
var list = [Item]()

func loadItems() {
    let request: NSFetchRequest<Item> = Item.fetchRequest()
    do {
        list = try context.fetch(request)
    } catch {
        print("Error fetching data from context: \(error)")
    }
    self.tableView.reloadData()
}

func saveItems() {
    do {
        try context.save()
    } catch {
        print("Error saving context: \(error)")
    }
}

Когда я отмечаю элемент в списке как выполненный, я пытаюсь добавить его в список выполненных действий и удалить его из исходного списка. Однако метод saveItems () не сохраняет элементы в готовом списке, а метод loadItems не загружает элементы для готового списка.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

В дополнение к ответу @ Калеба, который говорит вам, как это исправить ...

Причина, по которой это происходит, заключается в том, что эти массивы не сохраняются в Базовых данных. Он ничего о них не знает, поэтому не может отследить, в каком массиве находится объект. Он знает об объектах, но не о массивах. Каждый раз, когда вы выполняете выборку в своем коде, вы помещаете все элементы в list. Но он существует только в памяти и никогда не сохраняется в Core Data, поэтому в следующий раз вы получите тот же результат.

0 голосов
/ 16 ноября 2018

Когда я отмечаю элемент в списке как выполненный, я пытаюсь добавить его в список выполненных работ и удалить его из исходного списка.Однако метод saveItems () не сохраняет элементы в готовом списке, а метод loadItems не загружает элементы для готового списка.

Есть два способа, которыми вы можете справиться с этим:

  1. Сделать done свойством Item.Затем вы можете просто сохранить все элементы, не беспокоясь о том, в каком списке они находятся. Вы можете выбрать все элементы и создать список «сделать», отфильтровав элементы, помеченные как выполненные, и создать список «выполнено» с помощьюотфильтровывать элементы, которые не помечены как выполненные.Запросы на выборку могут быть гораздо более сложными, чем просто «получить все элементы»Вместо этого вы можете сказать «извлечь все элементы, для которых done является ложным».

  2. Исправьте ваш код так, чтобы методы load и save фактически загружали исохраните оба списка, и статус элемента по-прежнему зависит от того, в каком списке он находится. Базовые данные очень хорошо отслеживают отношения между объектами, поэтому вы можете легко иметь объект, обладающий свойствами done и todo, каждоеиз которых отношение «ко-многим» к Item, и маркировка выполненного предмета будет просто вопросом перемещения предмета из одного набора в другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...