zoukankan      html  css  js  c++  java
  • 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

    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  
    #import <UIKit/UIKit.h>
    #import <CoreData/CoreData.h>
    @class ViewController;
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    @property (strong, nonatomic) ViewController *viewController;
    
    @property(strong,nonatomic,readonly)NSManagedObjectModel* managedObjectModel;
    
    @property(strong,nonatomic,readonly)NSManagedObjectContext* managedObjectContext;
    
    @property(strong,nonatomic,readonly)NSPersistentStoreCoordinator* persistentStoreCoordinator;
    @end
    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  
    #import "AppDelegate.h"
    
    #import "ViewController.h"
    
    @implementation AppDelegate
    @synthesize managedObjectModel=_managedObjectModel;
    @synthesize managedObjectContext=_managedObjectContext;
    @synthesize persistentStoreCoordinator=_persistentStoreCoordinator;
    - (void)dealloc
    {
        [_window release];
        [_viewController release];
        [_managedObjectContext release];
        [_managedObjectModel release];
        [_persistentStoreCoordinator release];
        [super dealloc];
    }
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        // Override point for customization after application launch.
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    - (void)applicationWillResignActive:(UIApplication *)application
    {
        // 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.
        // 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.
    }
    
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        // 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. 
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        // 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.
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        // 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.
    }
    
    - (void)applicationWillTerminate:(UIApplication *)application
    {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    //托管对象
    -(NSManagedObjectModel *)managedObjectModel
    {
        if (_managedObjectModel!=nil) {
            return _managedObjectModel;
        }
    //    NSURL* modelURL=[[NSBundle mainBundle] URLForResource:@"CoreDataExample" withExtension:@"momd"];
    //    _managedObjectModel=[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
        _managedObjectModel=[[NSManagedObjectModel mergedModelFromBundles:nil] retain];
        return _managedObjectModel;
    }
    //托管对象上下文
    -(NSManagedObjectContext *)managedObjectContext
    {
        if (_managedObjectContext!=nil) {
            return _managedObjectContext;
        }
        
        NSPersistentStoreCoordinator* coordinator=[self persistentStoreCoordinator];
        if (coordinator!=nil) {
            _managedObjectContext=[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
            
            [_managedObjectContext setPersistentStoreCoordinator:coordinator];
        }
        return _managedObjectContext;
    }
    //持久化存储协调器
    -(NSPersistentStoreCoordinator *)persistentStoreCoordinator
    {
        if (_persistentStoreCoordinator!=nil) {
            return _persistentStoreCoordinator;
        }
    //    NSURL* storeURL=[[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreaDataExample.CDBStore"];
    //    NSFileManager* fileManager=[NSFileManager defaultManager];
    //    if(![fileManager fileExistsAtPath:[storeURL path]])
    //    {
    //        NSURL* defaultStoreURL=[[NSBundle mainBundle] URLForResource:@"CoreDataExample" withExtension:@"CDBStore"];
    //        if (defaultStoreURL) {
    //            [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];
    //        }
    //    }
        NSString* docs=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
        NSURL* storeURL=[NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"CoreDataExample.sqlite"]];
        NSLog(@"path is %@",storeURL);
        NSError* error=nil;
        _persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
        if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
            NSLog(@"Error: %@,%@",error,[error userInfo]);
        }
        return _persistentStoreCoordinator;
    }
    //-(NSURL *)applicationDocumentsDirectory
    //{
    //    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    //}
    @end
    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;  
    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    @interface ViewController : UIViewController
    @property (retain, nonatomic) IBOutlet UITextField *nameText;
    @property (retain, nonatomic) IBOutlet UITextField *ageText;
    @property (retain, nonatomic) IBOutlet UITextField *sexText;
    @property(nonatomic,retain)AppDelegate* myAppDelegate;
    - (IBAction)addIntoDataSource:(id)sender;
    - (IBAction)query:(id)sender;
    - (IBAction)update:(id)sender;
    - (IBAction)del:(id)sender;
    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  
    #import "ViewController.h"
    #import "User.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        _myAppDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (void)dealloc {
        [_nameText release];
        [_ageText release];
        [_sexText release];
        [super dealloc];
    }
    //插入数据
    - (IBAction)addIntoDataSource:(id)sender {
        User* user=(User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.myAppDelegate.managedObjectContext];
        [user setName:_nameText.text];
        [user setAge:[NSNumber numberWithInteger:[_ageText.text integerValue]]];
        [user setSex:_sexText.text];
        NSError* error;
        BOOL isSaveSuccess=[_myAppDelegate.managedObjectContext save:&error];
        if (!isSaveSuccess) {
            NSLog(@"Error:%@",error);
        }else{
            NSLog(@"Save successful!");
        }
        
    }
    //查询
    - (IBAction)query:(id)sender {
        NSFetchRequest* request=[[NSFetchRequest alloc] init];
        NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];
        [request setEntity:user];
    //    NSSortDescriptor* sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    //    NSArray* sortDescriptions=[[NSArray alloc] initWithObjects:sortDescriptor, nil];
    //    [request setSortDescriptors:sortDescriptions];
    //    [sortDescriptions release];
    //    [sortDescriptor release];
        NSError* error=nil;
        NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
        if (mutableFetchResult==nil) {
            NSLog(@"Error:%@",error);
        }
        NSLog(@"The count of entry: %i",[mutableFetchResult count]);
        for (User* user in mutableFetchResult) {
            NSLog(@"name:%@----age:%@------sex:%@",user.name,user.age,user.sex);
        }
        [mutableFetchResult release];
        [request release];
    }
    //更新
    - (IBAction)update:(id)sender {
        NSFetchRequest* request=[[NSFetchRequest alloc] init];
        NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];
        [request setEntity:user];
        //查询条件
        NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];
        [request setPredicate:predicate];
        NSError* error=nil;
        NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
        if (mutableFetchResult==nil) {
            NSLog(@"Error:%@",error);
        }
        NSLog(@"The count of entry: %i",[mutableFetchResult count]);
        //更新age后要进行保存,否则没更新
        for (User* user in mutableFetchResult) {
            [user setAge:[NSNumber numberWithInt:12]];
            
        }
        [_myAppDelegate.managedObjectContext save:&error];
        [mutableFetchResult release];
        [request release];
        
    }
    //删除
    - (IBAction)del:(id)sender {
        NSFetchRequest* request=[[NSFetchRequest alloc] init];
        NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];
        [request setEntity:user];
        NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];
        [request setPredicate:predicate];
        NSError* error=nil;
        NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
        if (mutableFetchResult==nil) {
            NSLog(@"Error:%@",error);
        }
        NSLog(@"The count of entry: %i",[mutableFetchResult count]);
        for (User* user in mutableFetchResult) {
            [_myAppDelegate.managedObjectContext deleteObject:user];
        }
        
        if ([_myAppDelegate.managedObjectContext save:&error]) {
            NSLog(@"Error:%@,%@",error,[error userInfo]);
        }
    }
    @end


    对于多线程它是不安全的,需要进行特殊处理下次再说吧

  • 相关阅读:
    Flexbox兼容性
    响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)
    Flex布局之box-flex
    Flex布局(伸缩盒布局)
    input美化问题
    用纯css改变下拉列表select框的默认样式
    超越icon font
    CSS居中之美
    php中yaf框架的服务器配置
    MySQL优化
  • 原文地址:https://www.cnblogs.com/yulang314/p/3566891.html
Copyright © 2011-2022 走看看