我正在思考 Swift 2 中错误处理的变化(以前更简单。感谢 Apple),并且在我在应用程序中使用的代码块中从我收到的核心数据中加载一些东西一个奇怪的错误。
我相信我正确地做了错误处理,但我傻眼了,因为在
if let results = fetchResults
我遇到错误:“使用未解析的标识符‘fetchResults’
我是否对导致此问题的新错误处理做错了什么?
override func viewDidLoad() {
super.viewDidLoad()
/*--------- Load Data from Core Data ----------*/
var request = NSFetchRequest(entityName: "Peoples")
var error : NSError?
// let fetchResults = managedObjectContext.executeFetchRequest(request, error: error) as! [Peoples]
do {
let fetchResults = try managedObjectContext.executeFetchRequest(request) as? [Peoples]
} catch var error as NSError{
print("Fetch Failed")
}
if let results = fetchResults
{
peopleArray = results//Result
let num = peopleArray.count
for var i = 0; i < num; i++
{
strPhoneNum = peopleArray[i].valueForKey("phone") as! String
strFullName = peopleArray[i].valueForKey("name") as! String
phoneArray.addObject(strPhoneNum)//Add phone number in array
nameArray.addObject(strFullName)//Add name in arrray
}
}
/*---------------------------------------------------*/
contactTable.reloadData()
}
最佳答案
局部变量仅在它们声明的范围内可见,在 fetchResult
的情况下,do
block 。
如果获取成功,则将所有要执行的代码也放在 do
block 中,并且根本不需要任何可选绑定(bind),因为 peopleArray
是有效的。
我稍微简化了代码。
do {
let peopleArray = try managedObjectContext.executeFetchRequest(request) as! [Peoples]
for person in peopleArray
{
strPhoneNum = person.valueForKey("phone") as! String
strFullName = person.valueForKey("name") as! String
phoneArray.addObject(strPhoneNum)//Add phone number in array
nameArray.addObject(strFullName)//Add name in arrray
}
contactTable.reloadData()
} catch var error as NSError{
print("Fetch Failed")
}
关于ios - Swift 2 中的获取请求、核心数据和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851744/