Swift Core Data
首先需要创建一个模版,进去“file”->“new”->”file”->”Core Data”->”Data Model”。
然后点击右下角的“add entity”。
在Xcode里面这个Entity会变成一个NSMangedObject的一个实体。Xcode的数据库是基于SQL的,所以每一个entity会有属性、关系以及fetched properties(用于搜索?)。
可以通过NSMangedObject的两个函数来更改属性的值。
创建关系
进入视图显示模式,ctrldrag两个entity。然后修改两个relations的名字。
然后可以修改它们n对n的约束(type)。
这样子会把tweets这一个关系变成NSSet。
在代码中使用
在代码中使用这些数据库需要使用NSManagedObjectContext。
在创建开始的项目的时候,如果选择了“Use Core Data”,那么Xcode会自动帮我们创建一些方法(在AppDelegate)。当然也可以我们自己创建UIManagedDocument。
创建代码
首先为他们创建subclass。
记得要选择swift。
不过创建的时候出现了错误提示,要解决这个问题可以参考这里。
插入行至数据库
NSEntityDescription.insertNewObjectForEntityForName("Tweet", inManagedObjectContext: moc)
访问某一行的属性(列)
func valueForKey(String) -> AnyObject?
func setValue(AnyObject?, forKey: String )
保存
context.save()
但是这个方法有一个问题,就是可能会抛出错误,我们必须学习一下swift中错误抛出的处理方式。
删除
mangedObjectContext.deleteObject(tweet)
搜索
使用NSFetchRequest来进行。你需要规定想抓取的Entity,以及抓取的规模和限制。
同时也需要规定返回的string的排序方式(使用NSSortDescripitor)。
NSPredicate则是规定我们需要什么,注意其中的%@有点像printf里的%f。
上面的图片返回的是joe在aDate后创建的tweets以及screenName是CS193p的tweeter。
例子
Thrown Errors
do {
try context.save()
} catch let error {
//里面会有NSError,它提供一些方法可以处理这些错误。
}
UITableView和Core Data的交互
因为大量的数据非常适合使用Table View来展示,所以xcode直接提供了一个NSFetchedResultsController类来实现。它可以总是和数据库同步。
创建一个NSFetchedResultsController的方法: