D1dff22eee577ee9fe0d3f9f7b3a37c6
SwiftUI CoreData 精品实战之导入原始数据并存储数组数据(教程含源码)

实战需求

SwiftUI CoreData 精品实战之导入原始数据并存储数组数据?
1、CoreData如何将原来的数据导入app当中
2、如何将数组数据存储到CoreData中

本文价值与收获

看完本文后,您将能够作出下面的界面

截屏2021-02-01 下午5.08.45.png

截屏2021-02-01 下午5.08.45.png

Jietu20210201-170934.gif

Jietu20210201-170934.gif

看完本文您将掌握的技能

  • 通过json文件将数据导入App中
    下面是测试数据
[
  {
    "options" : [
      "A.0.8-0.83g\/kg",
      "B. 1.2-2.0g\/kg",
      "C. 2.0-4.0g\/kg",
      "D.4.0g 或者更多 g\/kg"
    ],
    "analysis" : "B. 运动员每天应消耗 1.2-2.0 克每公斤体重。任何超过 4.0 克\/千克可能是危险的。",
    "Gif" : "",
    "iscorrect" : 1,
    "title" : "一名运动员每 kg 体重大约要摄入多少 g 蛋白质?",
    "answer" : 2
  },
  {
    "title" : "下面哪种营养物质包含了维生素和矿物质?",
    "options" : [
      "A.蛋白质饮品",
      "B. 谷物早餐",
      "C. 能量饮料",
      "D.以上全部",
      "E.只有A 和 B"
    ],
    "analysis" : "D.以上所有都可能含有添加的维生素和矿物质",
    "iscorrect" : 1,
    "answer" : 4,
    "Gif" : ""
  }
]
  • 如果数组数据不需要查询,可以将数组转化为json字符串,当需要用的时候将字符串转为数组

实战代码

1、修改一下Persistence文件

static var preview: PersistenceController = {
        let result = PersistenceController(inMemory: true)
        let viewContext = result.container.viewContext

       // print(JSON(demos).description)
        let jsonURL = Bundle.main.url(forResource: "seed", withExtension: "json")!
        let jsonData = try! Data(contentsOf: jsonURL)
        do {
            let jdemos = try JSON(data:jsonData)

            for (index,subJson):(String, JSON) in jdemos {
                // Do something you want
                let item = subJson
                let newItem = Item(context: viewContext)
                newItem.title = item["title"].string
                newItem.options  = item["options"].rawString()
                newItem.answer = item["answer"].int16Value
            }

            try viewContext.save()
        } catch {

            let nsError = error as NSError
            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
        }
        return result
    }()

2、字符串转json

func string2json(str:String) -> [String]{
    do{
        let a = try JSON(data: Data(str.utf8))
        return  a.arrayValue.map {$0.stringValue}

    } catch{
        return []
    }
}

3、主界面源码
```
import SwiftUI
import CoreData
import SwiftyJSON

struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext

@FetchRequest(
    sortDescriptors: [NSSortDescriptor(keyPath: \Item.title, ascending: true)],
    animation: .default)
private var items: FetchedResults<Item>
top Created with Sketch.