Core Data プロジェクト (Swift) に状態復元を実装しようとしていますが、NSFetchedResultsController のラッパー クラスである分割ビュー コントローラーの UITableView のデータ ソースに 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 }
「static Foundation.IndexPath._unconditionallyBridgeFromObjectiveC (Swift.Optional<__ObjC.NSIndexPath>) -> Foundation の問題を指摘しているように見える状態の復元時に、AppDelegate クラスの上部でデバッガーを停止する EXC_BAD_INSTRUCTION 例外が発生しています。 .IndexPath".
私はrestoreArchiveToolを使用して、結果のdata.dataファイルをsavedStateフォルダーからコマンド「.../restorationArchiveTool --plist --structured -o path/to/outputfile」でplistに変換します
結果の plist ファイルをプレビューで表示すると、次のようになります。
kApplicationSelectedCellIndexPathsKey...( "<NSIndexPath: 0x7fe60054cb00> {長さ = 2、パス = 0 - 3}")
...しかし、Xcodeでplistを開くと、次のようになります:
キーは kApplicationSelectedCellIndexPathsKey ですが、値は ( だけです
デコーダーがデータ ファイルの変換に plist リーダーと同じアルゴリズムを使用すると仮定すると、何らかの例外が発生しても驚くことではありません。
UIDataSourceModelAssociation 拡張機能を削除すると、例外はなくなります。
他の誰かがこの問題を確認できますか、それとも本当に明らかなことを見逃していますか?