CoreData的用法

#import "ViewController.h"
#import "Student.h"

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
    NSArray *_dataArray;
    //负责应用与数据库交互
    NSManagedObjectContext *_context;

    NSIndexPath *_indexPath;
}
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;
@property (weak, nonatomic) IBOutlet UITextField *ageTextField;
@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initManagerObjectContext];
}
-(void)initManagerObjectContext
{
    //1.conredata文件的路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"CoreData.momd" ofType:nil];
    //文件路径
    NSURL *fileUrl = [NSURL fileURLWithPath:path];
    //2.加载本地所有模型
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:fileUrl];
    //3.创建数据库存储协议器(sqlit数据存储方式)
    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    NSString *storePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/student.sqlite"];
    NSLog(@"%@",NSHomeDirectory());
    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
    NSError *error;
    NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error];
    if (!store) {
        NSLog(@"%@",error.localizedDescription);
    }
    //创建数据库管理对象
    _context = [[NSManagedObjectContext alloc] init];
    _context.persistentStoreCoordinator = psc;
}
- (IBAction)addToSqlite:(id)sender {
    Student *model = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_context];
    model.name = _nameTextField.text;
    model.age = @(_ageTextField.text.integerValue);
    NSError *error;
    if (![_context save:&error]) {
        NSLog(@"%@",error.debugDescription);
    }
}
- (IBAction)selectFromSqlite:(id)sender {
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    //request.predicate = [NSPredicate predicateWithFormat:@""];
    _dataArray = [_context executeFetchRequest:request error:nil];
    [_tableView reloadData];

    //满足条件的个数
    [_context countForFetchRequest:request error:nil];
}
- (IBAction)update:(id)sender {
    Student *model = _dataArray[_indexPath.row];
    model.name = _nameTextField.text;
    model.age = @(_ageTextField.text.integerValue);
    [_context save:nil];
}
- (IBAction)delete:(id)sender {
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    NSArray *results = [_context executeFetchRequest:request error:nil];
    for (Student *model in results) {
        [_context deleteObject:model];
    }
    //删除所有数据,可以直接删除数据库文件
}
#pragma mark --UITabelViewDelegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIde = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIde];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIde];
    }
    Student *student = _dataArray[indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"姓名:%@",student.name];
    cell.detailTextLabel.text = [NSString stringWithFormat:@"年龄:%@",student.age];
    return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Student *model = _dataArray[indexPath.row];
    _nameTextField.text = model.name;
    _ageTextField.text = model.age.stringValue;
    _indexPath = indexPath;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-09-28 19:44:15

CoreData的用法的相关文章

关于CoreData的用法

有些同事觉得CoreData是一个看不懂,理解不清的神秘东东,其实ios的本地数据储存是一个sqlite数据库,一个简易的数据库,而这个CoreData是否支持所有储存的数据呢,显然不是的,站在我的角度,我是不支持把一些图片数据保存的CoreData里面,其一,如果保存图片需要把图片转化为Data类型,    UIImage * image = info[UIImagePickerControllerEditedImage];    //把Image转化成Data    self.imageDa

coredata基础用法1(附coredata demo)

一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式 3.好处:能够合理管理内存,避免使用sql的麻烦,高效 4.构成: (1)NSManagedObjectContext(被管理的数据上下文) 操作实际内容(操作持久层) 作用:插入数据,查询数据,删除数据 (

ios coredata的用法和利弊

第一部分coredata的用法 先建立一个使用use coredata的工程, 在.xcdatamodeld文件中建立表格并为表格添加属性 为表格添加关系, 下一步生成表格model 其中生成的model:User和Department里面的属性用的是@dynamic @property有两个对应的词,一个是@synthesize,一个是@dynamic.如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var; @synthesize的语义

[XMPP]iOS聊天软件学习笔记[三]

今天做了好友界面,其实xmpp内部已经写好很多扩展模块,所以使用起来还是很方便的 开发时间:五天(工作时间) 开发工具:xcode6 开发平台:iOS8 XMPP框架:XMPPFramework git clone https://github.com/robbiehanson/XMPPFramework.git 界面设计:使用StoryBoard github地址:https://github.com/hjandyz/XMPP 1.每一个模块创建以后都需要激活,比如自动连接模块 //自动连接模

oc常见误区

1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 查看源码打印?

CoreData用法三: NSPredicate在CoreData中的使用

NSPredicate在CoreData中常用作查询使用,相当于sql语句中的where查询子句. 最常用的方法为: NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; 比如我们要查询student表中name="jjy"的信息,我们可以这样去用NSPredicate NSEntityDescription * emEty = [NSEntityDescription entityForName:

CoreData用法四:多表查询

首先介绍下表结构:目前有两张表,一张是student,一张是Teacher.其中student对teacher是多对一关系: 下面是添加的数据: -(IBAction)add:(id)sender { Teacher * tea = (Teacher *)[NSEntityDescription insertNewObjectForEntityForName:@"Teacher" inManagedObjectContext:[CoreDataManage GetManagedObje

CoreData的数据存储

前言 CoreData是iOS开发中经常使用的数据持久化的技术.但其操作过程稍微繁琐,即使你只是实现简单的存取,不涉及请求优化,也要进行许多配置工作,代码量在动辄几十行,对新手来说也需要较大时间成本. MagicalRecord是OC的一个库,协助方便CoreData的工作.其吸收了Ruby on Rails的Active Record模式,目标是: 简化Core Data相关代码 允许清晰,简单,单行获取 当需要优化请求的时候,仍然允许修改NSFetchRequest 安装 1.在 githu

NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)

简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): [objc] view plaincopy NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; Format:(1)比较运算符>,<,==,>=,<=,!=可用于数值及字符串例:@"number > 100" (2)范围