我正在尝试在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
。
如何使这项工作得到任何帮助。
答案 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的代码