Доступ к значениям атрибута сущности, извлеченным из CoreData
У меня возникла проблема при попытке доступа к данным в полученных результатах из CoreData
, Данные представлены в UITableView
и это отображается нормально, я пытаюсь реализовать опцию для фильтрации данных на основе атрибута. Это также хорошо работает через NSCompoundPredicate
,
Запрос на выборку проходит нормально, однако у меня возникают проблемы при попытке извлечь значения из одного из атрибутов выбранной сущности, чтобы сложить их, чтобы представить общую стоимость.
Код для получения отфильтрованных результатов:
func attemptFilteredFetch(filter: Array<NSPredicate>)
{
let filterCriteria: NSCompoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: filter)
let fetchRequest: NSFetchRequest<StoredExpense> = StoredExpense.fetchRequest()
let dateSort = NSSortDescriptor(key: "dateOfExpense", ascending: false)
fetchRequest.sortDescriptors = [dateSort]
fetchRequest.predicate = filterCriteria
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
controller.delegate = self
self.controller = controller
do
{
try controller.performFetch()
}
catch
{
let error = error as NSError
print("\(error)")
}
expenseList.reloadData()
}
До сих пор я попробовал метод, который я нашел здесь, и похожие, найденные в Интернете, однако приложение вылетает, когда attemptFilteredFetch()
функция называется.
Я мог бы пойти по этому поводу неправильно, но я ожидаю, что я могу добавить запрос на выборку в массив и выполнить итерацию по нему, чтобы получить общее значение.
Есть ли способ лучше? Или есть какой-нибудь способ получить доступ к значению атрибута на лету?
1 ответ
Проблема возникла из-за наследования модели от более старой версии Xcode. AFAIK в бета-версиях Чтобы иметь возможность использовать CoreData NSManagedObject, подклассы должны были быть созданы вручную. Так как теперь это кажется избыточным в финальной версии Xcode, созданная вручную модель выдает случайные ошибки. Удаление и очистка кода решили проблемы, которые у меня были.