提问人:Jessica Kimble 提问时间:11/16/2023 最后编辑:koenJessica Kimble 更新时间:11/16/2023 访问量:41
从核心数据中检索类型为 [String] 的 Transformable
Retrieving Transformable of type [String] from Core Data
问:
“我的核心数据”属性设置为“可转换”,并在模型检查器中将自定义类设置为[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
答:
0赞
Jessica Kimble
11/16/2023
#1
它是通过创建一个空的 String 数组并在不指定索引的情况下将获取的数据附加到其中来解决的
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
}
评论
1赞
MartinM
11/16/2023
我不确定您的预期行为是什么,但这仅从上次获取的项中检索 results 属性,因为尽管您获取了 ResultsObject 的所有实体,但您没有附加任何内容。
评论