从核心数据中检索[String]类型的Transformable

问题描述 投票:0回答:1

我的核心数据属性设置为 Transformable,模型检查器中的自定义类设置为

[String]

我能够像这样保存数据:

func saveResultsObjects(results: [String]) {
    let entity   = NSEntityDescription.entity(forEntityName: "ResultsObjects", in: context)
    let result = NSManagedObject(entity: entity!, insertInto: privateContext)
        
    result.setValue(results, forKey: "results")
        
    do {
        try privateContext.save()
        print("Success Saving In CoreData!")
    } catch {
        print("Failed Saving In CoreData!")
    }
}

并尝试以这种方式检索:

    func getResultsObjects() -> [String] {
        var retrievedResults = [String]()
        
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ResultsObjects")
        let result = try? privateContext.fetch(fetchRequest)
        for data in result as! [NSManagedObject] {
            
            let results = data.value(forKey: "results") as? [String]
            
//            retrievedResults.append(results)
            retrievedResults[0] = "\(String(describing: results))"
        }
        return retrievedResults
    }

但是当尝试在索引超出范围的

retrievedResults[0]
上检索时会崩溃

我仅保存

[String]
数据,共
HTML
数据。我做错了什么?

ios swift core-data
1个回答
0
投票

通过创建一个空的字符串数组并将获取的数据附加到其中而不指定索引来解决

func getResultsObjects() -> [String]? {
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ResultsObjects")
    request.returnsObjectsAsFaults = false
    
    var retrievedResults = [String]()
    
    do {
        let result = try privateContext.fetch(request)
        
        for data in result as! [NSManagedObject] {
            
            guard let results = data.value(forKey: "results") as? [String] else { return nil }
            retrievedResults = results
            
        }
        return retrievedResults
        
    } catch {
        print("Getting Data failed!")
    }
    return nil
}
© www.soinside.com 2019 - 2024. All rights reserved.