2016-01-07 31 views
8

Próbuję użyć metody countForFetchRequest w kontekście obiektu zarządzanego w Swift 2.0.countForFetchRequest w Swift 2.0

Pragnę zauważyć, że błąd obsługi dla executeFetchRequest został zmieniony w poprzek do nowej składni do-try-catch:

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

ale metoda countForFetchRequest nadal wykorzystuje wskaźnik błędu Legacy:

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

... i mam problem z ustaleniem sposobu użycia tego w Swift 2.0.

Jeśli zrobić to samo, co wcześniej Swift 2.0:

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

otrzymuję błędy mówiąc usunąć &, ale jeśli usunąć że dostaję kolejny błąd mówiąc, że NSError nie mogą być konwertowane do NSErrorPointer .

Każda pomoc zostanie doceniona, jeśli chodzi o sprawdzenie działania.

Odpowiedz

25

Twój kod jest prawie poprawne, ale error musi być zmienna, aby być przekazywane jak InOut-argument z &:

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

Aktualizacja: Od Swift 3,countForFetchRequest zgłasza błąd:

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

Ach, haczyka! Ma doskonały sens. Dziękuję za to :) – Skoota

0

Trzeba zrobić tak:

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

Jest to kod dla Swift 2.0