CoreData - 数据的存储与读取(1)

开发工具Xcode8
首先创建一个工程, 并完成以下功能, 弹出一个alter, 并把输入框的值复制个cell

Jietu20170805-151554-HD.gif

让后当双击home, 把进成杀掉时, 再重启程序, 保存在cell上的值不见了. 接下来就是要使用CoreData把数据保存下来.

首先, 需要新建一个实体Entity, 你可以把这个东西暂且理解为一个Class.
第一步, 选中HitList.xcdatamodeld文件
第二步, 点击下面的Add Entity
第三部, 修改实体的名称, 并添加一个属性
像下图这样


CoreData - 数据的存储与读取(1)_第1张图片
屏幕快照 2017-08-05 下午3.20.07.jpg

下面来实现保存数据的方法

func save(name: String) {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
      return
    }

    let managedContext = appDelegate.persistentContainer.viewContext

    let entity = NSEntityDescription.entity(forEntityName: "Person",
                                            in: managedContext)!

    let person = NSManagedObject(entity: entity,
                                 insertInto: managedContext)

    person.setValue(name, forKeyPath: "name")

    do {
      try managedContext.save()
      people.append(person)
    } catch let error as NSError {
      print("Could not save. \(error), \(error.userInfo)")
    }
  }

通过实现上面的方法, 就实现了数据的持久化保存.

然后接下来我们在viewWillAppear的时候拿到数据要拿到数据

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
      return
    }

    let managedContext = appDelegate.persistentContainer.viewContext

    let fetchRequest = NSFetchRequest(entityName: "Person")
    do {
      people = try managedContext.fetch(fetchRequest)
    print(person.value(forKey: "name")!)
    } catch let error as NSError {
      print("Could not fetch. \(error), \(error.userInfo)")
    }
  }

以上就实现了一个简单的数据持久化, 但是这个持久化存在小一些隐患. 下节, 就来谈谈隐患. 是他更健壮.

你可能感兴趣的:(CoreData - 数据的存储与读取(1))