CoreData CURD

近阶段想做一款针对自己的理财软件,全部实在本地操作,所以要用到数据库。原来一直都是用FMDB,直接用sql语句,后来看到CoreData挺牛逼的,所以我决定要用CoreData去写这个软件。由于对CoreData了解并不是很多,所以我会抽空闲时间,搞定CoreData.

        今天学习了CoreData的简单用法,增删改查。由于是一个Demo所以也没怎么进行封装,就迁就着看,再以后的几篇关于CoreData的blog里,我会深入学习,并且最终会用block对他进行封装,争取用起来写更少的代码量。 

        CoreData让不懂sql语句的人获益不少,因为他的操作基本是不用sql语句的。个人感觉效率比FMDM操作数据库高,而且还能直接生成实体类,省去了我们去一个文件一个文件的去建立model层的东西,用起来着实不错啊。下面看看他的简单用法吧。

      这个例子是一个单表的操作,表名:Student,字段有四个:studentnumber,name,age,gender.

首先,把我demo的整体文件架构介绍一下,如下:



下面看一下CoreDataManage文件,由于在文件中的代码里都已经有很明确的注释,所以在这不罗嗦太多:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;">//  
  2. //  CoreDataManage.h  
  3. //  CoreData  
  4. //  
  5. //  Created by junyuan ji on 14-5-25.  
  6. //  Copyright (c) 2014年 junyuan ji. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10. #import <CoreData/CoreData.h>  
  11.   
  12. @interface CoreDataManage : NSObject  
  13.   
  14. +(NSManagedObjectContext *)GetManagedObjectContext;  
  15. @end</span>  

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  CoreDataManage.m  
  3. //  CoreData  
  4. //  
  5. //  Created by junyuan ji on 14-5-25.  
  6. //  Copyright (c) 2014年 junyuan ji. All rights reserved.  
  7. //  
  8.   
  9. #import "CoreDataManage.h"  
  10.   
  11. @interface CoreDataManage()  
  12. +(NSManagedObjectModel *)Default;  
  13. +(NSPersistentStoreCoordinator *)GetPresistentStoreCoordinator;  
  14. @end  
  15.   
  16. @implementation CoreDataManage  
  17.   
  18. //创建管理对象模型  
  19. +(NSManagedObjectModel *)Default  
  20. {  
  21.     static NSManagedObjectModel * managedModel = nil;  
  22.     if (managedModel == nil)  
  23.     {  
  24.         //mergedModelFromBundles: 搜索工程中所有的.xcdatamodeld文件,并加载所有的实体到一个NSManagedObjectModel  实例中。这样托管对象模型知道所有当前工程中用到的托管对象的定义  
  25.         managedModel = [NSManagedObjectModel mergedModelFromBundles:nil];  
  26.     }  
  27.     return managedModel;  
  28. }  
  29.   
  30. //创建持久化数据存储协调器  
  31. +(NSPersistentStoreCoordinator *)GetPresistentStoreCoordinator  
  32. {  
  33.     static NSPersistentStoreCoordinator * storeCoordinator = nil;  
  34.     if (storeCoordinator == nil)  
  35.     {  
  36.         storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self Default]];  
  37.         //创建数据库存储位置  
  38.         NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  39.         NSLog(@"path = %@========/n%@",path,NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));  
  40.         NSString * filepath = [path stringByAppendingPathComponent:@"coredata.sqlite"];  
  41.         NSError * error = nil;  
  42.         [storeCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:filepath] options:nil error:&error];  
  43.         NSLog(@"error = %@",error);  
  44.     }  
  45.     return storeCoordinator;  
  46. }  
  47.   
  48. //创建托管对象上下文  
  49. //托管对象上下文类似于应用程序和数据存储之间的一块缓冲区。这块缓冲区包含所有未被写入数据存储的托管对象。你可以添加、删除、更改缓冲区内的托管对象。在很多时候,当你需要读、插入、删除对象时,你将会调用托管对象上下文的方法。  
  50. +(NSManagedObjectContext *)GetManagedObjectContext  
  51. {  
  52.     static NSManagedObjectContext * context = nil;  
  53.     if (context == nil)  
  54.     {  
  55.         context = [[NSManagedObjectContext alloc] init];  
  56.         [context setPersistentStoreCoordinator:[self GetPresistentStoreCoordinator]];  
  57.     }  
  58.     return context;  
  59. }  
  60. @end  

运行后界面布局如下:


界面有点丑将就着看吧

下面是增删改查的操作代码:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;">//  
  2. //  RootViewController.m  
  3. //  CoreData  
  4. //  
  5. //  Created by junyuan ji on 14-5-25.  
  6. //  Copyright (c) 2014年 junyuan ji. All rights reserved.  
  7. //  
  8.   
  9. #import "RootViewController.h"  
  10. #import <CoreData/CoreData.h>  
  11. #import "CoreDataManage.h"  
  12. #import "Student.h"  
  13.   
  14. #define TABLE_NAME @"Student"  
  15.   
  16. @interface RootViewController ()  
  17. @property (retain,nonatomic) IBOutlet UITextField * tf_studentnumber;  
  18. @property (retain,nonatomic) IBOutlet UITextField * tf_name;  
  19. @property (retain,nonatomic) IBOutlet UITextField * tf_age;  
  20. @property (retain,nonatomic) IBOutlet UITextField * tf_gender;  
  21. -(IBAction)add:(id)sender;  
  22. -(IBAction)delete:(id)sender;  
  23. -(IBAction)search:(id)sender;  
  24. -(IBAction)edit:(id)sender;  
  25. @end  
  26.   
  27. @implementation RootViewController  
  28.   
  29. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  30. {  
  31.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  32.     if (self) {  
  33.         // Custom initialization  
  34.     }  
  35.     return self;  
  36. }  
  37.   
  38. - (void)viewDidLoad  
  39. {  
  40.     [super viewDidLoad];  
  41.     // Do any additional setup after loading the view from its nib.  
  42. }  
  43. -(IBAction)add:(id)sender  
  44. {  
  45.     Student * stu = (Student *)[NSEntityDescription insertNewObjectForEntityForName:TABLE_NAME inManagedObjectContext:[CoreDataManage GetManagedObjectContext]];  
  46.     stu.studentnumber = [NSNumber numberWithInt:[self.tf_studentnumber.text intValue]];  
  47.     stu.name = self.tf_name.text;  
  48.     stu.age = [NSNumber numberWithInt:[self.tf_age.text intValue]];  
  49.     stu.gender=[NSNumber numberWithInt:[self.tf_gender.text intValue]];  
  50.       
  51.     NSError * error = nil;  
  52.     if ([[CoreDataManage GetManagedObjectContext] save:&error])  
  53.     {  
  54.         self.tf_studentnumber.text = @"";  
  55.         self.tf_name.text = @"";  
  56.         self.tf_age.text = @"";  
  57.         self.tf_gender.text = @"";  
  58.     }  
  59.     else  
  60.     {  
  61.       NSLog(@"add entity error = %@",error);  
  62.     }  
  63. }  
  64.   
  65. -(IBAction)delete:(id)sender  
  66. {  
  67.     NSArray * arr = [self searchResult];  
  68.     __block Student * deletemp ;  
  69.     [arr enumerateObjectsUsingBlock:^(Student * obj, NSUInteger idx, BOOLBOOL *stop) {  
  70.         if ([obj.studentnumber intValue] == [self.tf_studentnumber.text intValue])  
  71.         {  
  72.             deletemp = obj;  
  73.             *stop = YES;  
  74.         }  
  75.     }];  
  76.     if (deletemp)  
  77.     {  
  78.         [[CoreDataManage GetManagedObjectContext] deleteObject:deletemp];  
  79.         NSLog(@"====ok===delete");  
  80.     }  
  81. }  
  82.   
  83. -(IBAction)search:(id)sender  
  84. {  
  85.     [self searchResult];  
  86. }  
  87.   
  88. -(NSArray *)searchResult  
  89. {  
  90.     NSFetchRequest * request = [[NSFetchRequest alloc] init];  
  91.     NSEntityDescription * desption = [NSEntityDescription entityForName:TABLE_NAME inManagedObjectContext:[CoreDataManage GetManagedObjectContext]];  
  92.     [request setEntity:desption];  
  93.       
  94.     NSError * error = nil;  
  95.     NSArray * result = [[CoreDataManage GetManagedObjectContext] executeFetchRequest:request error:&error];  
  96.     if (!error)  
  97.     {  
  98.         [result enumerateObjectsUsingBlock:^(Student * obj, NSUInteger idx, BOOLBOOL *stop) {  
  99.             NSLog(@"--%d,%@,%@,%@,%@--/n",idx,obj.studentnumber,obj.name,obj.age,obj.gender);  
  100.         }];  
  101.           
  102.     }  
  103.     else  
  104.     {  
  105.         NSLog(@"error seach  = %@",error);  
  106.     }  
  107.     return result;  
  108. }  
  109.   
  110. -(IBAction)edit:(id)sender  
  111. {  
  112.     NSArray * arr = [self searchResult];  
  113.     [arr enumerateObjectsUsingBlock:^(Student * obj, NSUInteger idx, BOOLBOOL *stop) {  
  114.         if ([obj.studentnumber intValue] == [self.tf_studentnumber.text intValue])  
  115.         {  
  116.             obj.name = self.tf_name.text;  
  117.             obj.gender = [NSNumber numberWithInt:[self.tf_gender.text intValue]];  
  118.             obj.age = [NSNumber numberWithInt:[self.tf_age.text intValue]];  
  119.               
  120.             NSError * error = nil;  
  121.             if ([[CoreDataManage GetManagedObjectContext] save:&error])  
  122.             {  
  123.                 ;  
  124.             }  
  125.             else  
  126.             {  
  127.                 NSLog(@"error=====%@",error);  
  128.             }  
  129.             *stop = YES;  
  130.         }  
  131.     }];  
  132. }  
  133.   
  134.   
  135. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
  136. {  
  137.     [self.tf_studentnumber resignFirstResponder];  
  138.     [self.tf_name resignFirstResponder];  
  139.     [self.tf_gender resignFirstResponder];  
  140.     [self.tf_age resignFirstResponder];  
  141. }  
  142.   
  143. - (void)didReceiveMemoryWarning  
  144. {  
  145.     [super didReceiveMemoryWarning];  
  146.     // Dispose of any resources that can be recreated.  
  147. }  
  148.   
  149. @end</span><span style="font-size:18px;">  
  150. </span>  

增删改查的代码就是上面这些了,以后有时间了再去封装,在写blog,今天到这了。



源码下载



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值