Я пытаюсь реализовать восстановление состояния в проекте Core Data (Swift), и у меня возникают проблемы с реализацией протокола UIDataSourceModelAssociation в источнике данных для UITableView в контроллере разделенного представления, который является классом-оболочкой вокруг NSFetchedResultsController. Код:Xcode 8.1 UIDataSourceModelAssociation сломан?
1 extension EventDataProvider : UIDataSourceModelAssociation
2 {
3 public func modelIdentifierForElement(at idx: IndexPath, in view: UIView) -> String?
4 {
5 let elementAtIndexPath = self.fetchedResultsController.object(at: idx)
6
7 return String(describing: elementAtIndexPath.objectID.uriRepresentation())
8 }
9 public func indexPathForElement(withModelIdentifier identifier: String, in view: UIView) -> IndexPath?
10 {
11 if let url = URL(string: identifier),
12 let objectID = self.fetchedResultsController.managedObjectContext.persistentStoreCoordinator?.managedObjectID(forURIRepresentation: url),
13 let object = self.fetchedResultsController.managedObjectContext.object(with: objectID) as? CDEvent
14 {
15 return self.fetchedResultsController.indexPath(forObject: object) as NSIndexPath?
16 }
17
18 return nil
19 }
20 }
Я получаю исключение EXC_BAD_INSTRUCTION, который останавливает отладчик в верхней части класса AppDelegate, на восстановления государства, которое, кажется, указывают на проблему с «статическими Foundation.IndexPath._unconditionallyBridgeFromObjectiveC (Swift.Optional < __ObjC.NSIndexPath>) -> Foundation.IndexPath ".
Я использую restorationArchiveTool преобразовать полученный data.data файл из папки savedState в PLIST с командой».../restorationArchiveTool --plist --structured -o путь/к/выходной_файл
Если просмотреть полученный файл Plist с предварительным просмотром, я получаю следующее:
kApplicationSelectedCellIndexPathsKey ... ("< NSIndexPath: 0x7fe60054cb00 > {длина = 2, путь = 0 - 3}")
... но если я открою plist в Xcode, я получаю следующее:
kApplicationSelectedCellIndexPathsKey для ключа, но только с (для значения
предполагающего декодер использует тот же алгоритм, как читатель Plist для преобразования файла данных, то не было бы удивительно, чтобы получить какое-то исключение.
Если я удалю расширение UIDataSourceModelAssociation, исключение исчезнет.
Может ли кто-нибудь еще подтвердить эту проблему или я пропустил что-то действительно очевидное?