iOS 之 Core Data实践 2

1,增加一个Entity

  HitList.xcdatamodeld➡Add Entity➡重命名为Person

  

2,增加字段

  一个entity就相当于一个表格,可以向里面添加属性,在Attributes处选择建立的表格,往里面添加属性

  

3,在View Controller中引入数据库

  import CoreData

  

4,换用NSManagedObject类型的数组存储数据

  var people = [NSManagedObject]()

  

5,既然数据源发生了变化,table中的配置也要做相应的修改

  return people.count

        let person = people[indexPath.row]

   //使用一种类似字典的方式操作数据
        cell.textLabel?.text = person.valueForKey("name") as! String?

6, 定义个func来添加数据到数据库里 分5个步骤:

func SaveName(text : String){
        //1 获取coredata总代理
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate //获取总代理
        let managedObjectContext = appDelegate.managedObjectContext  //获取总管
        //2 新建一个Entity  <#T##entityName: String##String#>是编辑器里面的person
        let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedObjectContext)  //告诉需要添加的信息在哪里
        let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)
        //3 保存文本框里面值到person
        person.setValue(text, forKey: "name")
        //4 保存entity到托管对象总管中
        if managedObjectContext.hasChanges{
            do{try managedObjectContext.save()}
            catch{
                let error = error as NSError
                print("无法保存 \(error),\(error.userInfo)")
            }
        }
        //5 保存到数组中,让界面显示
        people.append(person)
    }

  

7,上面完成了存数据,下面继续写取数据的方法

  在viewDidLoad中写过多初始化代码会导致应用黑屏,我们重写viewDidAppear来获取数据

    override func viewDidAppear(animated: Bool) {
       super.viewDidDisappear(animated)
        //1 获取coredata总代理
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate //获取总代理
        let managedObjectContext = appDelegate.managedObjectContext  //获取总管
        //2 建立一个获取的请求
        let fetchResults = NSFetchRequest(entityName: "Person")
        //3 执行请求
        do{let fetchedRequest = try managedObjectContext.executeFetchRequest(fetchResults) as! [NSManagedObject]
              people = fetchedRequest
            self.tableView.reloadData()
          }
        catch{
            let error = error as NSError
            print("无法获取\(error),\(error.userInfo)")
        }
    }

 

posted on 2015-12-17 20:22  罗小夕  阅读(151)  评论(0编辑  收藏  举报

导航