ios中的coredata的使用


  Core Data數據持久化是對SQLite的一個升級,它是iOS集成的,在說Core Data之前,我們先說說在CoreData中使用的幾個類。

   (1)NSManagedObjectModel(被管理的對象模型)

           相當於實體,不過它包含 了實體間的關系

    (2)NSManagedObjectContext(被管理的對象上下文)

         操作實際內容

        作用:插入數據  查詢  更新  刪除

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

          相當於數據庫的連接器

    (4)NSFetchRequest(獲取數據的請求)    

        相當於查詢語句

     (5)NSPredicate(相當於查詢條件)

    (6)NSEntityDescription(實體結構)

    (7)后綴名為.xcdatamodel的包

        里面的.xcdatamodel文件,用數據模型編輯器編輯

       編譯后為.momd或.mom文件,這就是為什么文件中沒有這個東西,而我們的程序中用到這個東西而不會報錯的原因

   首先我們要建立模型對象

   

  其次我們要生成模型對象的實體User,它是繼承NSManagedObjectModel的

  

    點擊之后你會發現它會自動的生成User,現在主要說一下,生成的User對象是這種形式的

 

這里解釋一下dynamic  平常我們接觸的是synthesize

 dynamic和synthesize有什么區別呢?它的setter和getter方法不能自已定義

 

打開CoreData的SQL語句輸出開關

1.打開Product,點擊EditScheme...
2.點擊Arguments,在ArgumentsPassed On Launch中添加2項
1> -com.apple.CoreData.SQLDebug
2> 1

 

 

[plain]  view plain  copy
 print?
  1. #import <UIKit/UIKit.h>  
  2. #import <CoreData/CoreData.h>  
  3. @class ViewController;  
  4.   
  5. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
  6.   
  7. @property (strong, nonatomic) UIWindow *window;  
  8.   
  9. @property (strong, nonatomic) ViewController *viewController;  
  10.   
  11. @property(strong,nonatomic,readonly)NSManagedObjectModel* managedObjectModel;  
  12.   
  13. @property(strong,nonatomic,readonly)NSManagedObjectContext* managedObjectContext;  
  14.   
  15. @property(strong,nonatomic,readonly)NSPersistentStoreCoordinator* persistentStoreCoordinator;  
  16. @end  

 

[plain]  view plain  copy
 print?
  1. #import "AppDelegate.h"  
  2.   
  3. #import "ViewController.h"  
  4.   
  5. @implementation AppDelegate  
  6. @synthesize managedObjectModel=_managedObjectModel;  
  7. @synthesize managedObjectContext=_managedObjectContext;  
  8. @synthesize persistentStoreCoordinator=_persistentStoreCoordinator;  
  9. - (void)dealloc  
  10. {  
  11.     [_window release];  
  12.     [_viewController release];  
  13.     [_managedObjectContext release];  
  14.     [_managedObjectModel release];  
  15.     [_persistentStoreCoordinator release];  
  16.     [super dealloc];  
  17. }  
  18.   
  19. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  20. {  
  21.     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
  22.     // Override point for customization after application launch.  
  23.     self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];  
  24.     self.window.rootViewController = self.viewController;  
  25.     [self.window makeKeyAndVisible];  
  26.     return YES;  
  27. }  
  28.   
  29. - (void)applicationWillResignActive:(UIApplication *)application  
  30. {  
  31.     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.  
  32.     // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.  
  33. }  
  34.   
  35. - (void)applicationDidEnterBackground:(UIApplication *)application  
  36. {  
  37.     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.   
  38.     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.  
  39. }  
  40.   
  41. - (void)applicationWillEnterForeground:(UIApplication *)application  
  42. {  
  43.     // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.  
  44. }  
  45.   
  46. - (void)applicationDidBecomeActive:(UIApplication *)application  
  47. {  
  48.     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.  
  49. }  
  50.   
  51. - (void)applicationWillTerminate:(UIApplication *)application  
  52. {  
  53.     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.  
  54. }  
  55. //托管對象  
  56. -(NSManagedObjectModel *)managedObjectModel  
  57. {  
  58.     if (_managedObjectModel!=nil) {  
  59.         return _managedObjectModel;  
  60.     }  
  61. //    NSURL* modelURL=[[NSBundle mainBundle] URLForResource:@"CoreDataExample" withExtension:@"momd"];  
  62. //    _managedObjectModel=[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];  
  63.     _managedObjectModel=[[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
  64.     return _managedObjectModel;  
  65. }  
  66. //托管對象上下文  
  67. -(NSManagedObjectContext *)managedObjectContext  
  68. {  
  69.     if (_managedObjectContext!=nil) {  
  70.         return _managedObjectContext;  
  71.     }  
  72.       
  73.     NSPersistentStoreCoordinator* coordinator=[self persistentStoreCoordinator];  
  74.     if (coordinator!=nil) {  
  75.         _managedObjectContext=[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];  
  76.           
  77.         [_managedObjectContext setPersistentStoreCoordinator:coordinator];  
  78.     }  
  79.     return _managedObjectContext;  
  80. }  
  81. //持久化存儲協調器  
  82. -(NSPersistentStoreCoordinator *)persistentStoreCoordinator  
  83. {  
  84.     if (_persistentStoreCoordinator!=nil) {  
  85.         return _persistentStoreCoordinator;  
  86.     }  
  87. //    NSURL* storeURL=[[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreaDataExample.CDBStore"];  
  88. //    NSFileManager* fileManager=[NSFileManager defaultManager];  
  89. //    if(![fileManager fileExistsAtPath:[storeURL path]])  
  90. //    {  
  91. //        NSURL* defaultStoreURL=[[NSBundle mainBundle] URLForResource:@"CoreDataExample" withExtension:@"CDBStore"];  
  92. //        if (defaultStoreURL) {  
  93. //            [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];  
  94. //        }  
  95. //    }  
  96.     NSString* docs=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];  
  97.     NSURL* storeURL=[NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"CoreDataExample.sqlite"]];  
  98.     NSLog(@"path is %@",storeURL);  
  99.     NSError* error=nil;  
  100.     _persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];  
  101.     if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {  
  102.         NSLog(@"Error: %@,%@",error,[error userInfo]);  
  103.     }  
  104.     return _persistentStoreCoordinator;  
  105. }  
  106. //-(NSURL *)applicationDocumentsDirectory  
  107. //{  
  108. //    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];  
  109. //}  
  110. @end  

 

[plain]  view plain  copy
 print?
  1. #import <UIKit/UIKit.h>  
  2. #import "AppDelegate.h"  
  3. @interface ViewController : UIViewController  
  4. @property (retain, nonatomic) IBOutlet UITextField *nameText;  
  5. @property (retain, nonatomic) IBOutlet UITextField *ageText;  
  6. @property (retain, nonatomic) IBOutlet UITextField *sexText;  
  7. @property(nonatomic,retain)AppDelegate* myAppDelegate;  
  8. - (IBAction)addIntoDataSource:(id)sender;  
  9. - (IBAction)query:(id)sender;  
  10. - (IBAction)update:(id)sender;  
  11. - (IBAction)del:(id)sender;  

 

[plain]  view plain  copy
 print?
  1. #import "ViewController.h"  
  2. #import "User.h"  
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8.   
  9. - (void)viewDidLoad  
  10. {  
  11.     [super viewDidLoad];  
  12.     // Do any additional setup after loading the view, typically from a nib.  
  13.     _myAppDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];  
  14. }  
  15.   
  16. - (void)didReceiveMemoryWarning  
  17. {  
  18.     [super didReceiveMemoryWarning];  
  19.     // Dispose of any resources that can be recreated.  
  20. }  
  21.   
  22. - (void)dealloc {  
  23.     [_nameText release];  
  24.     [_ageText release];  
  25.     [_sexText release];  
  26.     [super dealloc];  
  27. }  
  28. //插入數據  
  29. - (IBAction)addIntoDataSource:(id)sender {  
  30.     User* user=(User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.myAppDelegate.managedObjectContext];  
  31.     [user setName:_nameText.text];  
  32.     [user setAge:[NSNumber numberWithInteger:[_ageText.text integerValue]]];  
  33.     [user setSex:_sexText.text];  
  34.     NSError* error;  
  35.     BOOL isSaveSuccess=[_myAppDelegate.managedObjectContext save:&error];  
  36.     if (!isSaveSuccess) {  
  37.         NSLog(@"Error:%@",error);  
  38.     }else{  
  39.         NSLog(@"Save successful!");  
  40.     }  
  41.       
  42. }  
  43. //查詢  
  44. - (IBAction)query:(id)sender {  
  45.     NSFetchRequest* request=[[NSFetchRequest alloc] init];  
  46.     NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  
  47.     [request setEntity:user];  
  48. //    NSSortDescriptor* sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];  
  49. //    NSArray* sortDescriptions=[[NSArray alloc] initWithObjects:sortDescriptor, nil];  
  50. //    [request setSortDescriptors:sortDescriptions];  
  51. //    [sortDescriptions release];  
  52. //    [sortDescriptor release];  
  53.     NSError* error=nil;  
  54.     NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  
  55.     if (mutableFetchResult==nil) {  
  56.         NSLog(@"Error:%@",error);  
  57.     }  
  58.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  
  59.     for (User* user in mutableFetchResult) {  
  60.         NSLog(@"name:%@----age:%@------sex:%@",user.name,user.age,user.sex);  
  61.     }  
  62.     [mutableFetchResult release];  
  63.     [request release];  
  64. }  
  65. //更新  
  66. - (IBAction)update:(id)sender {  
  67.     NSFetchRequest* request=[[NSFetchRequest alloc] init];  
  68.     NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  
  69.     [request setEntity:user];  
  70.     //查詢條件  
  71.     NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];  
  72.     [request setPredicate:predicate];  
  73.     NSError* error=nil;  
  74.     NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  
  75.     if (mutableFetchResult==nil) {  
  76.         NSLog(@"Error:%@",error);  
  77.     }  
  78.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  
  79.     //更新age后要進行保存,否則沒更新  
  80.     for (User* user in mutableFetchResult) {  
  81.         [user setAge:[NSNumber numberWithInt:12]];  
  82.           
  83.     }  
  84.     [_myAppDelegate.managedObjectContext save:&error];  
  85.     [mutableFetchResult release];  
  86.     [request release];  
  87.       
  88. }  
  89. //刪除  
  90. - (IBAction)del:(id)sender {  
  91.     NSFetchRequest* request=[[NSFetchRequest alloc] init];  
  92.     NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  
  93.     [request setEntity:user];  
  94.     NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];  
  95.     [request setPredicate:predicate];  
  96.     NSError* error=nil;  
  97.     NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  
  98.     if (mutableFetchResult==nil) {  
  99.         NSLog(@"Error:%@",error);  
  100.     }  
  101.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  
  102.     for (User* user in mutableFetchResult) {  
  103.         [_myAppDelegate.managedObjectContext deleteObject:user];  
  104.     }  
  105.       
  106.     if ([_myAppDelegate.managedObjectContext save:&error]) {  
  107.         NSLog(@"Error:%@,%@",error,[error userInfo]);  
  108.     }  
  109. }  
  110. @end  


對於多線程它是不安全的,需要進行特殊處理下次再說吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM