如何解决受管对象中的String属性数组始终为nil
首先,我将从文本字段中提取内容到字典中:
var dict: [String: String] = [:]
for metricPair in metricStackView.arrangedSubviews {
if metricPair.subviews[0] is UITextField {
let unitTextField = metricPair.subviews[0] as! UITextField
let valueTextField = metricPair.subviews[1] as! UITextField
if let textContent = unitTextField.text,let valueTextContent = valueTextField.text {
let trimmedKey = textContent.trimmingCharacters(in: .whitespacesAndNewlines)
let trimmedValue = valueTextContent.trimmingCharacters(in: .whitespacesAndNewlines)
dict.updateValue(trimmedValue,forKey: trimmedKey)
}
}
}
我将其保存到核心数据中
let goal = Goal(context: self.context)
goal.date = Date()
for item in dict {
goal.metrics?.append(item.key)
}
goal.progress.insert(progress)
我的托管对象如下:
extension Goal {
@nonobjc public class func createFetchRequest() -> NSFetchRequest<Goal> {
return NSFetchRequest<Goal>(entityName: "Goal")
}
@NSManaged public var date: Date
@NSManaged public var metrics: [String]?
@NSManaged public var progress: Set<Progress>
}
即使在保存上下文之前,我仍然为nil
类型的metrics
属性获得[String]
。当我登录item.key
时:
for item in dict {
goal.metrics?.append(item.key)
}
内容正确显示。
解决方法
据我从上面的代码可以看出,metrics
数组未初始化。
尝试替换此行:
goal.metrics?.append(item.key)
使用这些行:
if case nil = goal.metrics?.append(item.key) {
goal.metrics = [item.key]
}
或仅包含以下几行:
if goal.metrics == nil {
goal.metrics = []
}
goal.metrics?.append(item.key)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。