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)")
}
}