Мне не удалось найти какую-либо информацию, которая была бы полезна для этой темы, и я несколько новичок и самоучка, поэтому извиняюсь за любое невежество.Я делаю приложение в стиле контактов, которое позволяет записывать посещения, сделанные с конкретным человеком.Я использую Базовые данные для хранения данных и связи «один ко многим», связывающей сущность «Человек» с сущностью «Визит».
Когда я выполняю переход из основного списка контактов, выбирая конкретного человека, которого я передаю, этот nsmanagedobject ofПерсонал в новом контроллере представления и использующий его в качестве предиката при извлечении посещений, которые я совершил с этим человеком.
Проблема возникает из-за восстановления состояния на этом этапе.Я хочу иметь возможность вернуться на страницу этого человека (и несколько других экземпляров по всему приложению, но этот пример покрывает проблему), но поскольку я передавал объект Person через сеанс, этот объект теперь равен нулю, что вызывает моеприложение дважды аварийно завершает работу, а затем запускается на главном экране, появляющемся для очистки и восстановления данных.
Независимо от того, что я пытаюсь сохранить в encoderestorablestate: с, нажмите home, затем остановите приложение в xcode, затем повторно запуститеxcode, функция decoderestorablestate никогда не вызывается и вылетает с нулем до этого.
Ниже мой контроллер fetchedresults, и происходит сбой в строке предиката, говоря, что self.person равен nil
lazy var fetchedResultsController: NSFetchedResultsController<Visit> = {
// Initialize Fetch Request
let fetchRequest: NSFetchRequest<NSManagedObject> = NSFetchRequest(entityName: "Visit")
// Add Sort Descriptors
let predicate = NSPredicate(format: "person == %@", self.person!)
fetchRequest.predicate = predicate
let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
// Initialize Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
// Configure Fetched Results Controller
fetchedResultsController.delegate = self
return fetchedResultsController as! NSFetchedResultsController<Visit>
}()
Я повторю это все работает отлично и, как и ожидалось, при использовании приложения сверху, он падает только при попытке восстановить состояние.
Я предпринял много разных попыток добавить кодируемое восстанавливаемое состояние, но ничего не остановило сбой.Это кажется чем-то большим, но мое отсутствие поиска какой-либо информации меня смутило.
Спасибо за ваше время.