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

 

posted on 2015-09-13 20:45  Baymax01  阅读(173)  评论(0编辑  收藏  举报

导航