Swift 2.0中的countForFetchRequest

时间:2016-01-07 10:20:36

标签: swift core-data swift2 nsfetchrequest

我正在尝试在Swift 2.0中的托管对象上下文中使用countForFetchRequest方法。

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

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

countForFetchRequest方法仍然使用旧版错误指针:

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

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

如果我和Swift 2.0之前做同样的事情:

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

我在删除&时收到错误消息,但如果删除该消息,则会收到另一条错误消息,指出NSError无法转换为NSErrorPointer

如何使这项工作得到任何帮助。

2 个答案:

答案 0 :(得分:27)

您的代码几乎是正确的,但error需要是变量,才能传递给 inout-argument with &

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

更新: 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
}

答案 1 :(得分:0)

你需要这样做:

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

这是Swift 2.0的代码