Chinaunix首页 | 论坛 | 博客
  • 博客访问: 415368
  • 博文数量: 116
  • 博客积分: 7087
  • 博客等级: 少将
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-19 23:32
文章分类

全部博文(116)

文章存档

2012年(1)

2011年(2)

2010年(10)

2009年(21)

2008年(18)

2007年(12)

2006年(21)

2005年(31)

我的朋友

分类:

2010-05-02 14:53:13

苹果的开发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。方便很多。
阅读(1708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~