2016-11-10 10 views
0

コアデータプロジェクト(Swift)で状態復元を実装しようとしていますが、NSFetchedResultsControllerの周りのラッパークラスである分割ビューコントローラのUITableViewのデータソースにUIDataSourceModelAssociationプロトコルを実装する際に問題があります。 コードは次のとおりです。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 }   

私は「静的Foundation.IndexPath._unconditionallyBridgeFromObjectiveCの問題点を指すように思われる状態の復元に、AppDelegateクラスの最上部にデバッガを停止しEXC_BAD_INSTRUCTION例外を取得しています(Swift.Optional < __ObjC.NSIndexPath>) - > Foundation.IndexPath "を参照してください。

私は「コマンドでのplistにsavedStateフォルダから生じdata.dataファイルを変換するためにrestorationArchiveToolを使用して.../restorationArchiveTool --plist --structured -oパス/に/

もしOUTPUTFILE

...しかし - :

kApplicationSelectedCellIndexPathsKey ...( "0x7fe60054cb00 > {3長= 2、パス= 0} < NSIndexPath:")私は次の取得、プレビューを有する得られたplistファイルを表示しますXcodeでplistを開くと、次のようになります:

kApplicationSelectedCellIndexPathsKeyキーのちょうど(デコーダを推定値

データファイルを変換するためのplistのリーダと同じアルゴリズムを使用するため、例外のいくつかの種類を取得することは驚くべきことではないと。

UIDataSourceModelAssociation拡張を削除した場合、その例外はなくなります。

誰もがこの問題を確認したり、私が本当に明白な何かを逃したことはありますか?

答えて

0

あなたの関数は、署名を持っています

return self.fetchedResultsController.indexPath(forObject: object) as NSIndexPath? 

return self.fetchedResultsController.indexPath(forObject: object) as IndexPath? 
に:あなたは IndexPath代わりの NSIndexPathに戻り値の型をキャストしなければならない理由

indexPathForElement(withModelIdentifier identifier: String, in view: UIView) -> IndexPath?

のthats

関連する問題