zoukankan      html  css  js  c++  java
  • iOS -数据持久化之CoreData

     Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句

    1.创建项目的时候勾选Use the CoreData

    2.创建好之后就会在左边的文件名那里看到一个CoreData.xcdatamodeldde文件

    3.点击之后在Xcode的中间可以看到它的内容,之后点击左下角的Add Entity可以添加表(表名可以修改,但首字母必须大写)

    4.在表里面添加属性

    5.创建表的数据模型

    (1)点击New File

    (2)点击next

    (3)点击next

    (4)要创建哪个表的数据模型就勾选哪一个,然后点击next

     //    读取coreData

        //    1、读取managedObjectModel

        //    2、找到里面所有实体的名字[model entitiesByName]

        //    3、找到要读取的实体NSEntityDescription *entry = entryDic[@"UserInfo"];

        //    4、初始化 查询对象 NSFetchRequest *request = [[NSFetchRequest alloc]init];

        //    5、通过上下文 查找 NSArray *list = [context executeFetchRequest:request error:nil];

     1  NSManagedObjectContext *context = [[AppDelegate appDelegate] managedObjectContext];
     2 
     3     
     4 
     5     //    1、读取managedObjectModel
     6 
     7     NSManagedObjectModel *model = [[AppDelegate appDelegate] managedObjectModel];
     8 
     9     //    2、找到里面所有实体的名字[model entitiesByName]
    10 
    11     NSDictionary *entitiesDic = [model entitiesByName];
    12 
    13     //    3、找到要读取的实体NSEntityDescription *entry = entryDic[@"UserInfo"];
    14 
    15     NSEntityDescription *entity = entitiesDic[@"Userinfo"];
    16 
    17     //    4、初始化 查询请求对象 NSFetchRequest
    18 
    19     NSFetchRequest *request = [[NSFetchRequest alloc]init];
    20 
    21     request.entity = entity;
    22 
    23     //    request.predicate
    24 
    25     //    request.fetchLimit
    26 
    27     //    request.fetchOffset
    28 
    29     
    30 
    31     //    5、通过上下文开始查询
    32 
    33    aList = [context executeFetchRequest:request error:nil];
    34 
    35     NSLog(@"%@",aList);
    36 
    37     
    38 
    39     if (aList.count!=0) {
    40 
    41         [MytableView reloadData];
    42 
    43 //        [MytableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation: UITableViewRowAnimationNone];
    44 
    45     }
    46 
    47  
    48 
    49  

    注:appDelegate这个方法是在AppDelegate文件里面定义的,在.h文件声明

    +(AppDelegate *)appDelegate;

    在.m文件实现

    +(AppDelegate *)appDelegate{
        return (AppDelegate *)[UIApplication sharedApplication].delegate;
    }

    操作coreData

     1、不管增删改查都需要先初始化 上下文[app managedObjectContext]

     2、插入具体内容到上下文

     + (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

     3、保存 saveContext

    - (void)addEntity{
        
        NSManagedObjectContext * conText = [[AppDelegate appDelegate]managedObjectContext];
       Massage * massage = [NSEntityDescription insertNewObjectForEntityForName:@"Massage" inManagedObjectContext:conText];
        [massage setValue:postView.titleTextFild.text forKey:@"title"];
        [massage setValue:postView.contentTextFild.text forKey:@"content"];
        Userinfo *userinfo = [NSEntityDescription insertNewObjectForEntityForName:@"Userinfo" inManagedObjectContext:conText];
             NSArray * List = @[@"陈3.jpg",@"陈2.jpg",@"是1.jpg",@"是3.jpg"];
        int arc = arc4random()%List.count;
    
        UIImage *img = [UIImage imageNamed:List[arc] ];
        [userinfo setValue:@"hehehe" forKey:@"name"];
        [userinfo setValue:@(11) forKey:@"age"];
        [userinfo setValue:UIImageJPEGRepresentation(img, 1) forKey:@"headImage"];
        [userinfo setValue:massage forKey:@"massage"];
     
        [[AppDelegate appDelegate] saveContext];
       }
  • 相关阅读:
    NSCalendar
    保护连接字符串
    System.Runtime.InteropServices.COMException: 拒绝访问.
    Windows 7 初体验
    Sql语句收藏
    因为WMI配置,无法执行Sql Server 系统配置检查器的解决办法
    url带中文参数显示乱码的问题
    想建立一个好的团队,有意者加我
    庆祝一下,早上的帖子上了24小时排行第三
    C/S结构和b/s结构的比较
  • 原文地址:https://www.cnblogs.com/popper123/p/4857405.html
Copyright © 2011-2022 走看看