簡體   English   中英

托管 object 中的字符串屬性數組始終為零

[英]The array of String property in a managed object constantly 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)

我的托管 object 如下所示:

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>
}

甚至在保存上下文之前,我一直為[String]類型的metrics屬性獲得nil 當我登錄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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM