我目前正在尝试使用Core Data来获取和添加项目到我的UITableView。提取和添加项目工作正常。然而,问题是当数据什么都没有时,我的获取结果是"致命错误:在展开可选值"时意外地发现nil,这是有道理的,因为我在数据库中没有任何内容。但我没有崩溃,而是想捕获错误并生成UIAlert错误消息而不是崩溃。但我目前的代码似乎不起作用。
func fetch() {
let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items")
do {
let fetchedItem = try moc.fetch(itemsFetch) as! [Items]
self.itemsName.append(fetchedItem.first!.name!)
self.itemDate.append(fetchedItem.first!.date!)
self.tableView.reloadData()
//print(fetchedItem.first!.name!)
//print(fetchedItem.first!.date!)
} catch {
//I thought this statement would catch the error, but it
// is not doing that
print("Hello")
fatalError("Bad things happened \(error)")
}
}
更新 - 我已更新代码以检查nil,但是,我得到:Initialiser for conditional binding must have optional type not NSFetchRequest
。不知道如何解决。
func fetch() {
if let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items") {
do{
let fetchedItem = try moc.fetch(itemsFetch) as! [Items]
self.itemsName.append(fetchedItem.first!.name!)
self.itemDate.append(fetchedItem.first!.date!)
self.tableView.reloadData()
//print(fetchedItem.first!.name!)
//print(fetchedItem.first!.date!)
} catch {
print("Hello")
fatalError("Bad things happened \(error)")
}
} else {
print("Checked")
}
}
答案 0 :(得分:0)
好的我找到了解决方案。这个问题来自do声明。以下是解决问题的方法。
let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items")
do{
let fetchedItem = try moc.fetch(itemsFetch) as! [Items]
if fetchedItem.count == 0{
// Since i casted it to an array of items (my entity),
// I can check whether there are no data by checking
// if the length of the array is 0
print("Checked")
}
else{
self.itemsName.append(fetchedItem.first!.name!)
self.itemDate.append(fetchedItem.first!.date!)
self.tableView.reloadData()
}
//print(fetchedItem.first!.name!)
//print(fetchedItem.first!.date!)
} catch {
print("Hello")
fatalError("Bad things happened \(error)")
}
答案 1 :(得分:0)
您也可以使用
if !(itemsFetch.isEmpty){
}
else{
print("error")
}