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

ezykj2lf  于 2023-11-19  发布在  iOS
关注(0)|答案(1)|浏览(118)

“我的核心数据”属性设置为可转换,“模型”检查器中的自定义类设置为[String]
我可以像这样保存数据:

  1. func saveResultsObjects(results: [String]) {
  2. let entity = NSEntityDescription.entity(forEntityName: "ResultsObjects", in: context)
  3. let result = NSManagedObject(entity: entity!, insertInto: privateContext)
  4. result.setValue(results, forKey: "results")
  5. do {
  6. try privateContext.save()
  7. print("Success Saving In CoreData!")
  8. } catch {
  9. print("Failed Saving In CoreData!")
  10. }
  11. }

字符串
试着用这种方式来检索:

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


但是当尝试在索引超出范围的retrievedResults[0]上检索时会崩溃
我只保存了HTML数据中的[String]。我做错了什么?

mklgxw1f

mklgxw1f1#

解决方法是创建一个空的String数组,并在不指定索引的情况下将获取的数据追加到该数组

  1. func getResultsObjects() -> [String]? {
  2. let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ResultsObjects")
  3. request.returnsObjectsAsFaults = false
  4. var retrievedResults = [String]()
  5. do {
  6. let result = try privateContext.fetch(request)
  7. for data in result as! [NSManagedObject] {
  8. guard let results = data.value(forKey: "results") as? [String] else { return nil }
  9. retrievedResults = results
  10. }
  11. return retrievedResults
  12. } catch {
  13. print("Getting Data failed!")
  14. }
  15. return nil
  16. }

字符串

展开查看全部

相关问题