gpt4 book ai didi

swift - 如何在 Swift 中将核心数据对象提取到字典中?

转载 作者:行者123 更新时间:2023-11-28 06:23:57 26 4
gpt4 key购买 nike

我已经将对象保存在核心数据中,我正在研究如何将这些对象作为字典获取

这是我的代码示例,其中部分是字典的键,公司是核心数据对象的数组。

private var companies = Dictionary<String, Array<Company>>()
private var sections: [String] = ["Pending", "Active", "Pending"]

override func viewWillAppear(_ animated: Bool) {
let fetchRequest : NSFetchRequest<Company> = Company.fetchRequest()
let moc = DatabaseController.getContext()
do {
let request = try moc.fetch(fetchRequest)
for case let (index, object) in request.enumerated() {
companies[sections[index]]!.append(object)
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}}

当我尝试执行我的代码时,出现错误:

enter image description here

fatal error: unexpectedly found nil while unwrapping an Optional value

谁能帮我解决这个问题?

最佳答案

该错误消息意味着您要强制解包一个没有值的可选值。换句话说,您在不应该使用的地方使用 ! 。 (您基本上不应该使用强制解包运算符 (!)。)

让我们看看你这样做的行:

companies[sections[index]]!.append(object)

如果我们将其分解并添加我们拥有的推断类型:

let section: String? = sections[index]
let companyArray: Array<Company> = companies[section]!

你正在崩溃,因为 companies 开始时是空的,所以请求任何数组都将返回 nil。 (实际上,我不确定你的代码是如何编译的,因为你不能使用可选的下标到字典中。)

但是,如果您修复了该问题,我们仍然会遇到问题,因为您正在使用获取的数组的索引来查找该部分。如果你拥有三个以上的公司,那将开始失败。

我怀疑你想要这样的东西:

for let company in result {
if var companyArray = companies[company.status] {
companyArray.append(company)
} else {
companies[company.status] = [company]
}
}

其中 statusCompany 上发明的属性,它返回一个 String,例如“Pending”或“Active”。

关于swift - 如何在 Swift 中将核心数据对象提取到字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com