Ios 正在获取包含核心数据的Nil项,导致错误

Ios 正在获取包含核心数据的Nil项,导致错误,ios,swift,uitableview,Ios,Swift,Uitableview,我目前正在尝试使用核心数据获取项目并将其添加到我的UITableView中。获取和添加项工作正常。但是,问题是,当数据没有任何内容时,我的获取结果是“致命错误:在展开可选值时意外发现nil”,这是有意义的,因为我在数据库中没有任何内容。但我不想崩溃,而是想捕获错误并生成UIAlert错误消息,而不是崩溃。但我目前的代码似乎不起作用 func fetch() { let itemsFetch = NSFetchRequest<NSFetchRequestResult>(

我目前正在尝试使用核心数据获取项目并将其添加到我的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)")
        }
    }

好的,我找到了解决办法。问题来自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")
}