2016-09-29 9 views
0

Ich bin auf Swift 3 migrieren und auf eine sehr seltsame Fehlermeldung während der Migration von abstrakten CoreData-Abfrage-Code gestoßen. entityName wird auf die folgende Methode übergeben:Swift 3/XCode 8 NSManagedObjectContext.fetch Fehler

func objects(entityName name:String)->[NSManagedObject]? { 
    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName:name) 
    var objects: [NSManagedObject]? 
    do { 
    objects = try managedObjectContext.fetch(fetchRequest) 
    } catch { ... } 
} 

Diese in den folgenden Fehlern führen:

Cannot invoke 'fetch' with an argument list of type '(NSFetchRequest<NSFetchRequestResult>)' Expected an argument list of type '(NSFetchRequest<NSFetchRequestResult>)'

Der Fehler wird unter Angabe ich nicht die Art seines erwarten kann. Kann man in Swift 3 so abstrakte Aufrufe an CoreData machen?

Der Beitrag How to apply the type to a NSFetchRequest instance? ist was mich so weit führen.

Ich habe versucht, fetchRequest zu werfen, aber es hat nichts geändert. managedObjectContext.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>)

Antwort

3

Try this:

do { 
    objects = try managedObjectContext.fetch(fetchRequest) as! [YourEntityName] 
    } catch { 
    print(error) 
} 
+0

Sie für diese Karanveer danken. Ich war auf die Fehlermeldung aufgehängt und dachte nicht daran, das offensichtliche Castingproblem vor mir zu betrachten. Der Fehlerbericht wurde an Apple gesendet. https://openradar.appspot.com/radar?id=5049582866137088 – dmorrow

+0

@dmorrow Gut. Es gibt auch andere Fehler, wie es Layoutprobleme gibt. Möglicherweise müssen Sie etwas in Ihrer Storyboard-Datei ändern. Wie im Dateiinspektor müssen Sie möglicherweise eine Option von Xcode 8.0 zu Xcode 7.x ändern –