swift - 对实体数组执行 `map` 时获取 nil 值

标签 swift core-data

我在 iOS 应用程序中使用 Core Data 并执行以下 Swift 代码,这会导致第二行出现错误:

let movies = (try? container.newBackgroundContext().fetch(request)) ?? []
return movies.map { $0.name! } // error: unexpectedly found nil while unwrapping...

请注意,在上面的示例中,100% 确定 movies 中不存在 namenil 的实体。核心数据模型中的相应属性设置为非可选

当我更改代码如下所示(即不内联 newBackgroundContext())时,没有错误:

let context = container.newBackgroundContext()
let movies = (try? context.fetch(request)) ?? []
return movies.map { $0.name! } // no error this time

我对 Swift 还很陌生,并假设它与内存管理有关(例如 context 过早定义),但我希望能详细解释为什么第一个代码中会出现错误列表。

最佳答案

每当您在数组上运行映射函数时,它都会返回一个可选值。似乎名称没有任何值(value),并且您正在强制展开。尝试使用compactMap。

movies.compactMap { $0.name }

关于swift - 对实体数组执行 `map` 时获取 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025461/

相关文章:

iphone - ios : crashing after including coredata to old project

ios - 核心数据: executeFetchRequest:error: returns objects with no managedObjectContext

ios - 保存或更新核心数据后不更新表 - Swift

iphone - 如何在 CoreData 应用程序中使用默认数据初始化存储?

swift - 如何使用 iOS 将送货地址添加到 Stripe

swift - 添加到 TableView 时 Realm 项会出现两次

swift - 为什么我无法在操作函数中切换 UIGestureRecognizer 的属性

swift - 如何在 Swift 中将基本的初始数据和唯一数据加载到 Core Data 中?

ios - 将字典保存到 UserDefaults

ios - 如何在 Swift 3.0 中将 JSON 输出设置为 UILabel ?