Swift 2.0中的countForFetchRequest

Sko*_*ota 9 core-data nsfetchrequest swift swift2

我试图countForFetchRequest在Swift 2.0中的托管对象上下文中使用该方法.

我注意到错误处理executeFetchRequest已更改为新do-try-catch语法:

func executeFetchRequest(_ request: NSFetchRequest) throws -> [AnyObject]
Run Code Online (Sandbox Code Playgroud)

但该countForFetchRequest方法仍然使用遗留错误指针:

func countForFetchRequest(_ request: NSFetchRequest,
                    error error: NSErrorPointer) -> Int
Run Code Online (Sandbox Code Playgroud)

...我在使用Swift 2.0时如何使用它时遇到了一些麻烦.

如果我做与Swift 2.0之前相同的事情:

let error: NSError? = nil
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error)
Run Code Online (Sandbox Code Playgroud)

我收到错误说删除&,但如果我删除,我得到另一个错误,说NSError不能转换为NSErrorPointer.

任何帮助将不胜感激如何使这项工作.

Mar*_*n R 28

你的代码几乎是正确的,但error需要是一个变量,以便作为inout-argument传递&:

var error: NSError? = nil
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error)
Run Code Online (Sandbox Code Playgroud)

更新:Swift 3开始, countForFetchRequest 抛出一个错误:

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