2016-11-10 5 views
0

Ich versuche, die Statuswiederherstellung für ein Core Data-Projekt (Swift) zu implementieren und habe Probleme bei der Implementierung des UIDataSourceModelAssociation-Protokolls für die Datenquelle eines UITableView in einem Split View-Controller, der eine Wrapperklasse um einen NSFetchedResultsController ist. Der Code ist:Xcode 8.1 UIDataSourceModelAssociation unterbrochen?

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 }   

ich eine EXC_BAD_INSTRUCTION Ausnahme bin immer, die den Debugger an der Spitze der AppDelegate Klasse hält, über staatliche Wiederherstellung, die mit „statischer Foundation.IndexPath._unconditionallyBridgeFromObjectiveC auf ein Problem zu hinweisen, scheint (Swift.Optional < __ObjC.NSIndexPath>) -> Foundation.IndexPath ".

verwende ich die restorationArchiveTool die resultierende data.data Datei aus dem savedState Ordner in einen plist mit dem Befehl“zu konvertieren .../restorationArchiveTool --plist --structured -o path/to/output

Wenn ich sehe die resultierende plist-Datei mit Vorschau, erhalte ich folgendes:

kApplicationSelectedCellIndexPathsKey ... ("< NSIndexPath: 0x7fe60054cb00 > {length = 2, path = 0 bis 3}")

... aber Wenn ich den Pliste in Xcode öffne, bekomme ich folgendes:

kApplicationSelectedCellIndexPathsKey für den Schlüssel aber mit nur (für den Wert

Vorausgesetzt, den Decoder mit dem gleichen Algorithmus wie der plist-Reader verwendet für die Datendatei konvertieren, wäre es nicht überraschend, eine Art von Ausnahme zu erhalten.

Wenn ich die UIDataSourceModelAssociation-Erweiterung entferne, verschwindet die Ausnahme.

Kann jemand anderes dieses Problem bestätigen oder habe ich etwas wirklich offensichtlich übersehen?

Antwort

0

Ihre Funktion hat die Unterschrift:

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

das ist, warum Sie den Rückgabetyp IndexPath werfen sollte statt NSIndexPath:

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

zu

return self.fetchedResultsController.indexPath(forObject: object) as IndexPath? 
Verwandte Themen