coredata基础用法1(附coredata demo)

一、概念

1.Core Data 是数据持久化存储的最佳方式

2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型

Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式

3.好处:能够合理管理内存,避免使用sql的麻烦,高效

4.构成:

(1)NSManagedObjectContext(被管理的数据上下文)

操作实际内容(操作持久层)

作用:插入数据,查询数据,删除数据

(2)NSManagedObjectModel(被管理的数据模型)

数据库所有表格或数据结构,包含各实体的定义信息

作用:添加实体的属性,建立属性之间的关系

操作方法:视图编辑器,或代码

(3)NSPersistentStoreCoordinator(持久化存储助理)

相当于数据库的连接器

作用:设置数据存储的名字,位置,存储方式,和存储时机

(4)NSManagedObject(被管理的数据记录)

相当于数据库中的表格记录

(5)NSFetchRequest(获取数据的请求)

相当于查询语句

(6)NSEntityDescription(实体结构)

相当于表格结构

(7)后缀为.xcdatamodeld的包

里面是.xcdatamodel文件,用数据模型编辑器编辑

编译后为.momd或.mom文件

5.依赖关系

 

二、基于SQLite数据库时,Core Data的简单使用


1 创建project


wKioL1V_uUTRwQJPAAGETnbWpVk811.jpg


添加framework    coredata.framework


wKiom1V_t8mCHWfRAABc4dXd7Rg400.jpg


2 创建mod文件


wKiom1V_tjaBnm4hAAGaJHdwTwQ946.jpg


3创建实例


Person 相当于表名

age 是表中字段,可以设定数据类型

relationship 关联其他表

wKioL1V_t-SjOrFhAANn0S1Azkc727.jpg


4 创建model


wKiom1V_tjaQKPDFAAGgynwYl-E807.jpg

wKioL1V_t-Xzw5UzAAEHGH-AhuM932.jpg

wKiom1V_tjeQRsmoAAEI2oJXNm8721.jpg

wKioL1V_t-WCxrbgAAE1WUSmXFc685.jpg









三 代码举例


(1)appdelegate 

    初始化managedObjectContext,managedObjectModel,persistentStoreCoordinator,如果创建工程的时候勾选了coredata,那么以下代码会自动生成


#import <UIKit/UIKit.h>


@interface AppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;


@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;

@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;


- (void)saveContext;

- (NSURL *)applicationDocumentsDirectory;


@end


@implementation AppDelegate


@synthesize managedObjectContext = __managedObjectContext;

@synthesize managedObjectModel = __managedObjectModel;

@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;


- (void)saveContext

{

    NSError *error = nil;

    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

    if (managedObjectContext != nil) {

        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {

            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

            abort();

        }

    }

}


- (NSURL *)applicationDocumentsDirectory

{

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

}


- (NSManagedObjectContext *)managedObjectContext

{

    if (__managedObjectContext != nil) {

        return __managedObjectContext;

    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];

    if (coordinator != nil) {

        __managedObjectContext = [[NSManagedObjectContext alloc] init];

        [__managedObjectContext setPersistentStoreCoordinator:coordinator];

    }

    return __managedObjectContext;

}


- (NSManagedObjectModel *)managedObjectModel

{

    if (__managedObjectModel != nil) {

        return __managedObjectModel;

    }

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"coredataOne" withExtension:@"momd"];

    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return __managedObjectModel;

}



- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

    if (__persistentStoreCoordinator != nil) {

        return __persistentStoreCoordinator;

    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coredataOne.sqlite"];

    

    NSError *error = nil;

    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    

    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

        abort();

    }

    return __persistentStoreCoordinator;

}


(2)增删改查例子


- (IBAction)add:(id)sender {

    

    Person *mPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:defaultContext];

    mPerson.firstname = @"Li";

    mPerson.age = @17;

    NSError *error;

    if (![defaultContext save:&error]) {

        NSLog(@"%@",[error userInfo]);

    }

    

}


- (IBAction)delete:(id)sender {

    

    Person *mPerson = [self qury];

    [defaultContext deleteObject:mPerson];

    

    NSError *error;

    if (![defaultContext save:&error]) {

        NSLog(@"%@",[error userInfo]);

    }

}


- (IBAction)update:(id)sender {

    

    Person *mPerson = [self qury];

    mPerson.firstname = @"Huang";

    mPerson.age = @16;

    

    NSError *error;

    if (![defaultContext save:&error]) {

        NSLog(@"%@",[error userInfo]);

    }


    

}


- (IBAction)search:(id)sender {

    Person *mPerson = [self qury];

    NSLog(@"%@",mPerson.firstname);

}


- (Person *)qury

{

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    // 设置要查询的实体

    request.entity = [NSEntityDescription entityForName:@"Person"

                                 inManagedObjectContext:defaultContext];

    // 设置排序(按照age降序)

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

    request.sortDescriptors = [NSArray arrayWithObject:sort];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname = '%@'", @"Li"];

    request.predicate = predicate;

    // 执行请求

    NSError *error = nil;

    NSArray *objs = [defaultContext executeFetchRequest:request error:&error];

    if (error) {

        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];

    }

    // 遍历数据

    for (Person *obj in objs) {

        NSLog(@"firstname=%@", obj.firstname);

    }

    

    if ([objs count]) {

        Person *mperson = objs[0];

        return mperson;

    }

    return nil;

}


四 查看数据库



1 sqlite路径 路径appdelte里面storeUrl

wKioL1V_u7KxHfEBAAHvVxBacis431.jpg

2 使用coredata会生成三个文件 sqlite,shm,wal


wKiom1V_ugTiBWYtAACEKaKMkDs834.jpg


3 在decument里面打开sqlite文件,可查看表


wKioL1V_u7KTk6cqAAG-zjUKgEg382.jpg


部分内容参照月光的尽头 博客,http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html


转载请注明出处


本文出自 “iOS悠悠Bug记” 博客,请务必保留此出处http://ios2013yoyo.blog.51cto.com/6260005/1662281

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值