#core-data #swift4
#core-data #swift4
Вопрос:
У меня есть TableView
. При нажатии на запись в этой таблице открывается другое представление, в котором эта запись доступна для редактирования.
Каков правильный способ справиться с этим? Я знаю, что могу извлекать записи из основных данных с помощью предикатов, подобных этому:
func fetchEntriesStartingWith(startingDate:Date) -> [FuelEntry] {
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "FuelEntry")
fetchRequest.predicate = NSPredicate(format: "date >= %@", startingDate as CVarArg)
let sort = NSSortDescriptor(key: #keyPath(FuelEntry.date), ascending: false)
fetchRequest.sortDescriptors = [sort]
do {
return try (CoreDataHandler.managedContext.fetch(fetchRequest) as? [FuelEntry] ?? [FuelEntry]())
} catch let error as NSError {
print("Could not fetch. (error), (error.userInfo)")
return []
}
}
Однако это кажется подверженным ошибкам: что, если у меня есть две записи с одинаковыми значениями (может произойти в моем приложении) и, таким образом, NSFetchRequest
возвращает две записи?
Очевидно, что эти две записи будут иметь разные идентификаторы, но я не уверен, как с ними работать и сделать вывод, какая запись чему будет соответствовать indexPath
.
Комментарии:
1. Не извлекать. Получить элемент по индексу (пути) из массива источника данных. Кстати, вы можете избавиться от этого громоздкого синтаксиса
as? [FuelEntry] ?? [FuelEntry]())
с помощью специального запроса на выборкуlet fetchRequest = NSFetchRequest<FuelEntry>(entityName: "FuelEntry")
2. @vadian Спасибо, я должен был подумать об этом.