Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

countForFetchRequest in Swift 2.0

I am trying to use the countForFetchRequest method on a managed object context in Swift 2.0.

I note that the error handling for executeFetchRequest has been changed across to the new do-try-catch syntax:

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

but the countForFetchRequest method still uses the legacy error pointer:

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

...and I am having a bit of trouble figuring out how to use this in Swift 2.0.

If I do the same thing as pre-Swift 2.0:

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

I get errors saying to remove the &, but if I remove that I get another error saying that NSError cannot be converted to an NSErrorPointer.

Any help would be appreciated about how to get this working.

like image 455
Skoota Avatar asked Jan 07 '16 10:01

Skoota


1 Answers

Your code is almost correct, but error needs to be a variable, in order to be passed as inout-argument with &:

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

Update: As of Swift 3, countForFetchRequest throws an error:

do {
    let count = try managedObjectContext.context.count(for:fetchRequest)
    return count
} catch let error as NSError {
    print("Error: \(error.localizedDescription)")
    return 0
}
like image 129
Martin R Avatar answered Nov 11 '22 15:11

Martin R