2016-01-07 7 views
8

Ich versuche, die Methode countForFetchRequest für einen verwalteten Objektkontext in Swift 2.0 zu verwenden.countForFetchRequest in Swift 2.0

Ich nehme zur Kenntnis, dass der Fehler für executeFetchRequest Handhabung hat in das neue do-try-catch Syntax geändert:

func executeFetchRequest(_ request: NSFetchRequest) throws -> [AnyObject] 

aber die countForFetchRequest Methode verwendet immer noch das Erbe Fehlerzeiger:

func countForFetchRequest(_ request: NSFetchRequest, 
        error error: NSErrorPointer) -> Int 

... und ich habe ein wenig Mühe herauszufinden, wie man das in Swift 2.0 benutzt.

Wenn ich das gleiche tun wie Pre-Swift 2.0:

let error: NSError? = nil 
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error) 

bekomme ich Fehler, die & entfernen sagen, aber wenn ich entfernen, dass ich noch einen Fehler erhalten, dass NSError nicht auf eine NSErrorPointer umgewandelt werden .

Jede Hilfe würde geschätzt werden, wie dies funktioniert.

Antwort

25

Ihr Code ist fast richtig, aber error braucht eine Variable, sein, um zu übergeben als inout-Argument mit &:

var error: NSError? = nil 
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error) 

Update: Ab Swift 3,countForFetchRequest wirft einen Fehler:

do { 
    let count = try managedObjectContext.context.count(for:fetchRequest) 
    return count 
} catch let error as NSError { 
    print("Error: \(error.localizedDescription)") 
    return 0 
} 
+0

Ah, Gotcha! Macht perfekt Sinn. Dank dafür :) – Skoota

0

Sie müssen wie dies tun:

let error = NSErrorPointer() 
let fetchResults = coreDataStack.context.countForFetchRequest(fetchRequest, error: error) 
print("Count \(fetchResults)") 

Dies ist der Code für Swift 2.0