[第1章]数据:CoreData的简单使用

来源:互联网 发布:优化驱动器要不要开 编辑:程序博客网 时间:2024/04/29 23:24

一、名词解析

新建项目时,直接勾选下图位置,自动生成一堆帮你设计好的代码。

新建项目时的窗口


1、NSManagedObjectContext

官方原文(可略过):
The managed object context (NSManagedObjectContext) is the object that your application will be interacting with the most, and therefore it is the one that is exposed to the rest of your application.

解析:Context,即“上下文”,这肯定是“CEO”,管理全局;与它打交道最多,含有很多方法。

特点:生成代码中,已经帮你设计好,直接使用即可(self.managedObjectContext!)


2、NSPersistentStoreCoordinator

官方原文(可略过):
The NSPersistentStoreCoordinator sits in the middle of the Core Data stack. The coordinator is responsible for realizing instances of entities that are defined inside of the model.

解析:协调员(参考他人翻译)

特点:已经设计好,不用手动调用。


3、NSManagedObjectModel

官方原文(可略过):An NSManagedObjectModel object describes a schema—a collection of entities (data models) that you use in your application.

解析:类比成,一个数据库(database)。

特点:已经设计好,不用手动调用。


4、NSManagedObject

官方原文(可略过):
解析:类比成,一个数据库(database)。创建的Entity实体类都是继承自它,如下图所示创建:
这里写图片描述

Entity的实体类大致如下:
这里写图片描述

特点:表的基类。使用时,作为Entity类的泛型


5、NSEntityDescription

官方原文(可略过):An entity description describes an entity (which you can think of as a table in a database).

解析:类比成,数据库(database)的表(table)。

特点:经常使用方法:func insertNewObjectForEntityForName(entityName: String, inManagedObjectContext context: NSManagedObjectContext) -> AnyObject
返回Entity的一个实例。


6、NSFetchRequest

解析:相当于查询语句。

特点:常用构造方法:NSFetchRequest(entityName: String)
返回一个查询实例。



二、使用

为一个Entity(表)创建一个数据类(即表中一条条的数据),如下:
PS: 用系统创建类直接使用会报错(xcode6.4),需要加上@objc(Author)

@objc(Author)class Author: NSManagedObject {    @NSManaged var id: NSNumber    @NSManaged var name: String    @NSManaged var gender: NSNumber}

1、插入

方法原型:class func insertNewObjectForEntityForName(entityName: String, inManagedObjectContext context: NSManagedObjectContext) -> AnyObject
参数1:Entity的名字;
参数2:上下文;
返回:Entity的一条数据实例。

插入一条数据数据,并赋值:

var author_1 = NSEntityDescription.insertNewObjectForEntityForName("Author", inManagedObjectContext: self.managedObjectContext!) as! Authorauthor_1.id = 001author_1.name = "Amy"author_1.gender = false // 修改过数据库之后,AppDelegate里边的方法saveContext()self.saveContext()


2、查询

方法原型:func executeFetchRequest(request: NSFetchRequest, error: NSErrorPointer) -> [AnyObject]?
参数1:一个NSFetchRequest实例;
参数2:用于保存Error信息;
返回:参数1中,属性entity里边包含的所有数据。

var request = NSFetchRequest(entityName: "Author")var authors = self.managedObjectContext!.executeFetchRequest(request, error: nil) as! Author// 打印查看结果。for author in authors {    println(author)}


3、修改

// 先查询var request = NSFetchRequest(entityName: "Author")var authors = self.managedObjectContext!.executeFetchRequest(request, error: nil) as! Author// 再修改for author in authors {    if author.id == 001 {        author.name = "Amy.K"    }}// 记得保存修改。self.saveContext()


4、删除

// 先查询var request = NSFetchRequest(entityName: "Author")var authors = self.managedObjectContext!.executeFetchRequest(request, error: nil) as! Author// 再删除;// 用“上下文”的deleteObject(object: NSManagedObject)方法。for author in authors {    if author.id == 001 {        self.managedObjectContext?.deleteObject(author)    }}// 记得保存修改。self.saveContext()
1 0
原创粉丝点击