2016-01-07 9 views
8

Sto tentando di utilizzare il metodo countForFetchRequest in un contesto di oggetti gestiti in Swift 2.0.countForFetchRequest in Swift 2.0

rilevo che il trattamento per executeFetchRequest errore è stato modificato attraverso il nuovo do-try-catch sintassi:

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

ma il metodo countForFetchRequest utilizza ancora il puntatore errore di eredità:

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

... e sto avendo un po 'di problemi a capire come usare questo in Swift 2.0.

Se faccio la stessa cosa di pre-Swift 2.0:

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

ricevo errori che dicono di rimuovere la &, ma se rimuovo che ottengo un altro errore dicendo che NSError non può essere convertito in un NSErrorPointer .

Qualsiasi aiuto sarebbe apprezzato su come ottenere questo funzionamento.

risposta

25

Il codice è quasi corretto, ma ha bisogno error essere una variabile , al fine di essere passato come inout-lite con &:

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

Aggiornamento: Come di Swift 3,countForFetchRequest genera un errore:

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! Ha perfettamente senso. Grazie per quello :) – Skoota

0

Hai bisogno di fare in questo modo:

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

Questo è il codice per la Swift 2.0

Problemi correlati