ios数据库CoreData

ios中可以使用c语言来操作sqlite数据库,但不是面向对象的,函数命名也很别扭,ios提供了CoreData来操作数据库,CoreData与Hibernate类似,可以通过创建相应的对象来实现数据的增删改查


1、为以后工程添加CoreData支持。

            首先添加CoreData.framework


2、添加实体模型文件   File--New---File


此处 命名为 YoungModel


3、AppDelegate.h添加如下代码

#import <UIKit/UIKit.h>
#import "CoreData/CoreData.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*) applicationDocumensDirectory;


@end

4、AppDelegate.m中初始化

#import "AppDelegate.h"

@interface AppDelegate ()

@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(@"保存异常 %@  %@",error ,[error userInfo]);
            abort();
        }
    }
}

-(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:@"YoungModel" withExtension:@"momd"];
    
    _managedObjectModel=[[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];
    return _managedObjectModel;
    
    
}


-(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
    
    if (_persistentStoreCoordinator!=nil) {
        return  _persistentStoreCoordinator;
    }
    
    NSURL* storeURL=[[self applicationDocumensDirectory]URLByAppendingPathComponent:@"Books.sqlite"];
    NSError* error=nil;
    
    _persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self managedObjectModel]];
    
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"设置持久化存储失败 %@   %@",error, [error userInfo]);
        abort();
    }
    
    return _persistentStoreCoordinator;
}

-(NSURL*)applicationDocumensDirectory{
    
    
    return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}


- (void)applicationWillTerminate:(UIApplication *)application {
    [self saveContext];
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
 

5、设计实体模型


在弹出的窗口中一路默认点下去

在 AppDelegate.m中添加如下代码用于测试

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    
        [self save:@"aaaa":[NSDate date]];
        [self save:@"bbb":[NSDate date]];
        [self save:@"c":[NSDate date]];
        [self save:@"dddddd":[NSDate date]];
        [self save:@"小李":[NSDate date]];
        [self get];
    //
    return YES;
}


输出如下

 

2015-10-12 19:40:41.368 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:41.450 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:43.385 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:43.388 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:44.437 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:44.443 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.083 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:45.089 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.717 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:45.724 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.727 coredata2[3541:212036] 获取到数据!!!!(
    "<MyEntity: 0x7b7616c0> (entity: MyEntity; id: 0x7b75c550 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p1> ; data: {\n    happenData = \"2015-10-12 11:40:25 +0000\";\n    name = aaaa;\n})",
    "<MyEntity: 0x7ba1c620> (entity: MyEntity; id: 0x7ba1e120 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p2> ; data: {\n    happenData = \"2015-10-12 11:40:41 +0000\";\n    name = bbb;\n})",
    "<MyEntity: 0x7b838210> (entity: MyEntity; id: 0x7b892db0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p3> ; data: {\n    happenData = \"2015-10-12 11:40:43 +0000\";\n    name = c;\n})",
    "<MyEntity: 0x7b763830> (entity: MyEntity; id: 0x7b7643c0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p4> ; data: {\n    happenData = \"2015-10-12 11:40:44 +0000\";\n    name = dddddd;\n})",
    "<MyEntity: 0x7b89af60> (entity: MyEntity; id: 0x7b892dc0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p5> ; data: {\n    happenData = \"2015-10-12 11:40:45 +0000\";\n    name = \"\\U5c0f\\U674e\";\n})"
)
2015-10-12 19:40:45.750 coredata2[3541:212036] aaaa --2015-10-12 11:40:25 +0000
2015-10-12 19:40:45.750 coredata2[3541:212036] bbb --2015-10-12 11:40:41 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] c --2015-10-12 11:40:43 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] dddddd --2015-10-12 11:40:44 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] 小李 --2015-10-12 11:40:45 +0000




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值