Xcode 8.1 UIDataSourceModelAssociation破裂了吗?
我想在Core Data项目(Swift)上实现状态恢复,并且在分割视图控制器中的UITableView的数据源上实现UIDataSourceModelAssociation协议时出现问题,这是一个围绕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路径/到/ OUTPUTFILE
如果我查看与预览所得plist文件,我得到以下:
kApplicationSelectedCellIndexPathsKey ...( “< NSIndexPath:0x7fe60054cb00 > {长度= 2,路径= 0 - 3}”)
...但如果我在Xcode中打开plist,我会得到以下内容:
kApplicationSelectedCellIndexPathsKey为重点,但只有(该值
。假定解码器将相同的算法的plist读卡器,用于将数据文件,它不会令人感到意外得到某种异常。
如果我删除了UIDataSourceModelAssociation扩展,则异常消失。
其他人可以证实这个问题,或者我错过了一些非常明显的东西吗?
你的函数签名:
indexPathForElement(withModelIdentifier identifier: String, in view: UIView) -> IndexPath?
这就是为什么你应该投的返回类型IndexPath
,而不是NSIndexPath
:
return self.fetchedResultsController.indexPath(forObject: object) as NSIndexPath?
到
return self.fetchedResultsController.indexPath(forObject: object) as IndexPath?