苹果的开发sdk中,有一个很好的数据管理api,称为core data,据说很强大,用好了,能省不少功夫,所以我最近在学习。目前取得了一点点进展,记录一下。
core data的用途不再赘述,去google上查查就好了。这里主要讲开发。
开发的步骤分为2步:
1.利用xcode图形化的模型编辑工具,来设计数据模型,或者简单点说,就是存储数据用的表。
这里的概念和关系型数据库表的概念非常类似,也是实体,属性,关系之类。
2.写一个程序,将模型装载进内存,进行后续处理。
说起来很简单,但是真正做的时候,却有点搞。
利用图形化工具来设计模型很简单,所见即所得。但是设计完了以后,这个模型文件却不是马上能用,它的扩展名是xcdatamodel。而根据文档,如果程序直接加载现成的模型文件,那么这个模型文件的扩展名应该是mom。而且文档上明确说了,可以用momc工具来编译生成mom文件。但实际上呢,momc这个命令根本就找不到。那么到底应该怎么做呢?
我的解决办法是这样的:
1.利用xcode向导,选择command line utility模版,并且要求支持core data,然后建立一个project.
2.利用图形化工具设计data model
3.保存并编译,但是不运行。
然后你就会发现在工程下的build目录里多了个mom文件。这个文件里,已经包含了数据模型了。
接下来怎么操作呢?我尝试了一下如何往模型里添加数据。
添加数据的基本步骤是这样的:
1.加载模型
2.将模型中需要访问的实体和一个具体的类绑定,并且指定数据的读取机制
3.访问具体的类,对其中的成员设置具体的值
4.通过指定的读写机制存盘数据即可。
xcode替我们生成的程序框架中,默认是将数据存在sqllite文件中的,那我也不改了。
NSManagedObjectContext *context = managedObjectContext();
NSEntityDescription *contactsEntity = [[managedObjectModel() entitiesByName] objectForKey:@"Contact"];
Contacts *contacts = [[Contacts alloc] initWithEntity:contactsEntity insertIntoManagedObjectContext:context];
[contacts setName:@"mac"];
[contacts setBirthDate:[NSDate dateWithString:@"1975-03-27" ]];
// Custom code here...
// Save the managed object context
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Error while saving\n%@",
([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
exit(1);
}
|
NSEntityDescription就是取具体的实体,并将其和某个类绑定。
context就是控制数据存取的类,通过它来将数据保存到具体的文件中去。它是个中间层,这样开发者可以暂时不用关心数据到底存到了xml中还是sqlite中,反正效果都差不多。
数据模型中的实体,一定要实例化成具体的类,才能够被访问,这个具体的类,目前我是手工写的,不知道有没有办法自动产生。由于目前objective c支持新的语法,多了一个property功能,使得不再需要为类写很多的setter和getter。只要在头文件里将一些变量定义为property,然后在m文件中用 synthesize变量名,那么编译器会自动生成setter和getter。方便很多。
阅读(1740) | 评论(0) | 转发(0) |