Ios 正在获取包含核心数据的Nil项,导致错误
我目前正在尝试使用核心数据获取项目并将其添加到我的UITableView中。获取和添加项工作正常。但是,问题是,当数据没有任何内容时,我的获取结果是“致命错误:在展开可选值时意外发现nil”,这是有意义的,因为我在数据库中没有任何内容。但我不想崩溃,而是想捕获错误并生成UIAlert错误消息,而不是崩溃。但我目前的代码似乎不起作用Ios 正在获取包含核心数据的Nil项,导致错误,ios,swift,uitableview,Ios,Swift,Uitableview,我目前正在尝试使用核心数据获取项目并将其添加到我的UITableView中。获取和添加项工作正常。但是,问题是,当数据没有任何内容时,我的获取结果是“致命错误:在展开可选值时意外发现nil”,这是有意义的,因为我在数据库中没有任何内容。但我不想崩溃,而是想捕获错误并生成UIAlert错误消息,而不是崩溃。但我目前的代码似乎不起作用 func fetch() { let itemsFetch = NSFetchRequest<NSFetchRequestResult>(
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)")
}
}
好的,我找到了解决办法。问题来自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)")
}
let itemsFetch=NSFetchRequest(entityName:“Items”)
做{
让fetchedItem=尝试moc.fetch(itemsFetch)as![Items]
如果fetchedItem.count==0{
//因为我将它铸造到一个项目数组(我的实体),
//我可以通过检查来检查是否没有数据
//如果数组的长度为0
打印(“选中”)
}
否则{
self.itemsName.append(fetchedItem.first!.name!)
self.itemDate.append(fetchedItem.first!.date!)
self.tableView.reloadData()
}
//打印(fetchedItem.first!.name!)
//打印(fetchedItem.first!.date!)
}抓住{
打印(“你好”)
fatalError(“发生了不好的事情\(错误)”)
}
您也可以使用
if !(itemsFetch.isEmpty){
}
else{
print("error")
}
将这一行置于if条件下,比如如果让itemsFetch=NSFetchRequest(entityName:“Items”){}在访问之前检查
nil
,不像java swift不会抛出NullPointerException
@himanshumuradia当我尝试该方法时,我得到2个错误,如果让itemsFetch=NSFetchRequest(entityName:“Items”),则在条件绑定中使用未解析标识符“itemsFetch”和初始化器必须具有可选类型,而不是NSFetchRequest,因为NSArray尝试此操作会导致其他错误。
if !(itemsFetch.isEmpty){
}
else{
print("error")
}