static int row=0;

static const NSString *kStoryboardName = @"LRCoreDataViewController";

static const NSString *kIdentifier = @"LRCoreDataViewController";



@interface LRCoreDataViewControllerCellInfo : NSObject

@property (nonatomic,strong) NSString *name;

@property (nonatomic,strong) NSString *city;

@property (nonatomic,strong) NSString *state;

@end

@implementation LRCoreDataViewControllerCellInfo

@end

typedef LRCoreDataViewControllerCellInfo CellInfo_t;



@interface LRCoreDataViewController ()<LRAlertViewManagerDelegate,UITableViewDataSource,UITableViewDelegate>

{

    NSManagedObjectContext *_context;

}

@property (strong, nonatomic) IBOutlet UITableView *myTableView;

@property (nonatomic,strong) NSMutableArray *cellInfoArray;

@end



@implementation LRCoreDataViewController

@synthesize failedBankInfos;

@synthesize managedObjectContext;

+(instancetype)createViewController:(id)createArgs{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:(NSString *)kStoryboardName bundle:nil];

    LRCoreDataViewController *vc = [storyboard instantiateViewControllerWithIdentifier:(NSString *)kIdentifier];

    return vc;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor=[UIColor cyanColor];

    [self initCoreData];

    [self initRightItem];

    [self initTableView];

    [self setExtraCellLineHidden:self.myTableView];

    //[self openDataBase];

    self.myDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

}

- (void)openDataBase{

    NSManagedObjectModel *model=[NSManagedObjectModel mergedModelFromBundles:nil];

    NSPersistentStoreCoordinator *coodinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];

    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/mydatabase.db"];

    NSError *error=nil;

    [coodinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:path] options:nil error:&error];

    if (error) {

        NSLog(@"打开数据库失败");

    }else{

        NSLog(@"创建数据库成功");

        _context=[[NSManagedObjectContext alloc]init];

        _context.persistentStoreCoordinator=coodinator;

    }

}

- (void)setExtraCellLineHidden: (UITableView *)tableView{

    UIView *view =[ [UIView alloc]init];

    view.backgroundColor = [UIColor clearColor];

    [tableView setTableFooterView:view];

    [tableView setTableHeaderView:view];

}

- (void)initTableView{

    self.myTableView.delegate=self;

    self.myTableView.dataSource=self;

}

- (void)initRightItem{

    UIButton *rightBtn = [[UIButton alloc]init];

    [rightBtn setFrame:CGRectMake(0, 0, 39, 36)];

    [rightBtn setImage:[UIImage imageNamed:@"addData"] forState:UIControlStateNormal];

    rightBtn.showsTouchWhenHighlighted = YES;

    [rightBtn addTarget:self action:@selector(addData) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:rightBtn];

    self.navigationItem.rightBarButtonItem = buttonItem;

}

#pragma mark - 向数据库中添加数据,并显示在当前界面

- (void)addData{

    LRAlertViewManager *manager=[LRAlertViewManager sharedAlertViewManager];

    manager.delegate=self;

    [manager showAlertView];

}

- (void)clickButton:(int)tag{

    if (tag==99) {

        NSError *error;

        //创建一个指向数据库的指针。管理对象,上下文。持久性存储模型对象

        NSManagedObjectContext *context=[self managedObjectContext];

        NSManagedObject *BankInfo=[NSEntityDescription insertNewObjectForEntityForName:@"BankInfo" inManagedObjectContext:context];

        [BankInfo    setValue:@"姓名" forKey:@"name"];

        [BankInfo    setValue:@"城市" forKey:@"city"];

        [BankInfo    setValue:@"状态" forKey:@"sta"];

        [BankInfo    setValue:[NSNumber numberWithInt:row] forKey:@"row"];

        NSManagedObject    *bankDetails=[NSEntityDescription insertNewObjectForEntityForName:@"BankDetails" inManagedObjectContext:context];

        [bankDetails setValue:[NSDate date] forKey:@"hh"];

        [bankDetails setValue:[NSDate date] forKey:@"mm"];

        [bankDetails setValue:[NSNumber numberWithInt:12345] forKey:@"zip"];

        [bankDetails setValue:BankInfo forKey:@"info"];

        [bankDetails    setValue:bankDetails forKey:@"details"];

        if (![context save:&error]) {

            NSLog(@"Whoops, could not save:%@",[error localizedDescription]);

        }

        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

        NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:context];

        [fetchRequest setEntity:entity];

        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

        for (FailedBankInfo *info in fetchedObjects) {

            NSLog(@"row: %d", info.row);

            FailedBankDetails *details = info.details;

            NSLog(@"Zip: %@", details.zip);

        }

        NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];

        NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];

        [fetchRequest2 setEntity:entity2];

        NSError *error2;

        self.failedBankInfos = [managedObjectContext executeFetchRequest:fetchRequest2 error:&error2];

        [self.myTableView reloadData];

        row++;

    }else if (tag==100){

        NSManagedObjectContext *context = [self managedObjectContext];

        NSEntityDescription *description = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:context];

        NSFetchRequest *request = [[NSFetchRequest alloc] init];

        [request setIncludesPropertyValues:NO];

        [request setEntity:description];

        NSError *error = nil;

        NSArray *datas = [context executeFetchRequest:request error:&error];

        if (!error && datas && [datas count]){

            for (NSManagedObject *obj in datas){

                [context deleteObject:obj];

            }

            if (![context save:&error]){

                NSLog(@"error:%@",error);

            }

        }

        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

        NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];

        [fetchRequest setEntity:entity];

        NSError *error2;

        self.failedBankInfos = [managedObjectContext executeFetchRequest:fetchRequest error:&error2];

        [self.myTableView reloadData];

    }

}

#pragma mark -初始化 NSArray存数据

- (void)initCoreData{

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];

    NSError *error;

    self.failedBankInfos = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

    self.title = @"CoreData";

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return failedBankInfos.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    

    if (!cell) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }

    FailedBankInfo *info = [failedBankInfos objectAtIndex:indexPath.row];

    cell.textLabel.text = info.name;

    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@",info.city, info.state];

    UILabel *deleteLabel=[[UILabel alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-200, 5, 200, 40)];

    deleteLabel.text=@"向左滑动删除CoreData数据";

    [cell.contentView addSubview:deleteLabel];

    return cell;

}

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

    return UITableViewCellEditingStyleDelete;

}

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{

    return @"删除";

}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSManagedObjectContext *context = [self managedObjectContext];

    NSEntityDescription *description = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:context];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    [request setIncludesPropertyValues:NO];

    [request setEntity:description];

    NSError *error = nil;

    NSArray *datas = [context executeFetchRequest:request error:&error];

    if (!error && datas && [datas count]){

        [context deleteObject:datas[indexPath.row]];

        if (![context save:&error]){

            NSLog(@"error:%@",error);

        }

    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];

    NSError *error2;

    self.failedBankInfos = [managedObjectContext executeFetchRequest:fetchRequest error:&error2];

    [self.myTableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

    [self.myTableView reloadData];

}

iOS coreData的更多相关文章

  1. iOS CoreData技术学习资源汇总

    一.CoreData学习指引 1. 苹果官方:Core Data Programming Guide 什么是CoreData? 创建托管对象模型 初始化Core Data堆栈 提取对象 创建和修改自定 ...

  2. IOS CoreData 多表查询demo解析

    在IOS CoreData中,多表查询上相对来说,没有SQL直观,但CoreData的功能还是可以完成相关操作的. 下面使用CoreData进行关系数据库的表与表之间的关系演示.生成CoreData和 ...

  3. iOS CoreData (一) 增删改查

    代码地址如下:http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映 ...

  4. iOS CoreData (二) 版本升级和数据库迁移

    前言:最近ChinaDaily项目需要迭代一个新版本,在这个版本中CoreData数据库模型上有新增表.实体字段的增加,那么在用户覆盖安装程序时就必须要进行CoreData数据库的版本升级和旧数据迁移 ...

  5. IOS CoreData 多表查询(下)

    http://blog.csdn.net/fengsh998/article/details/8123392 在iOS CoreData中,多表查询上相对来说,没有SQL直观,但COREDATA的功能 ...

  6. iOS CoreData 介绍和使用(以及一些注意事项)

    iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...

  7. iOS CoreData介绍和使用(以及一些注意事项)

    iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...

  8. iOS - CoreData 数据库存储

    1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...

  9. iOS coreData问题

    iOS常见错误-CoreData: Cannot load NSManagedObjectModel.nil is an illegal URL parameter
这是因为在工程中CoreData的 ...

  10. ios Coredata 的 rollback undo 等事物处理函数

    首先说明 ios 中 NSManagedObjectContext 默认的 undoManager是nil的,就是说 undo 和 redo 都是没用的. 但是 rollback函数和reset函数是 ...

随机推荐

  1. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(一)

    ArcGIS 10.2 for Desktop是在10.1的成功基础上进行的改进,它的改进包括:性能提升.附加的安全性.40多个新的分析工具.3D功能提高.栅格增强.新的地理数据管理能力以及其它更多的 ...

  2. SQL Server中的查询

          本博文简介一下SQL Server中经常使用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCom ...

  3. IP Camera 和 Web Camera 差分

    一直以来,,没太注意IP camera 和 Web Camera之间的差,这两个摄像头,昨天晚上.闲来无事Google少数,我们发现,还有两者之间的差异. 1) IP Camera IP Camera ...

  4. 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础

    原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...

  5. iOS 删除黑色边框线导航栏&amp;删除搜索框的阴影边界线和中黑色文本输入框 - 解

    删除黑色边框线导航栏 in viewDidload: [self.navigationController.navigationBar setBackgroundImage:[[UIImage all ...

  6. [模式识别].(希腊)西奥多里蒂斯&lt;第四版&gt;笔记8它__模板匹配

      在语音识别方面,同样的话都是同一个人,每次说的情况是不同的,难以识别.本章是定义如何适应不同的情况有不同的特性指标. 1,基于最优路径搜索的度量:①贝尔曼最优性原则和动态编程②编辑距离(The E ...

  7. js+html+css简单的互动功能页面(2015知道几乎尖笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

    js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html? from=y1.7-1. ...

  8. 【SICP读书笔记(一)】正则序展开的特殊情况

    scheme解释器有两种实现方式,一种是应用序,先对每个参数求值,再以首过程对所有求得的参数求值. 第二种是正则序,会“完全展开然后归约”(书中原文) SICP中的练习1.5,让我困惑了一下.原题如下 ...

  9. HDU 1557 权利指数 国家压缩 暴力

    HDU 1557 权利指数 状态压缩 暴力 ACM 题目地址:HDU 1557 权利指数 题意:  中文题,不解释. 分析:  枚举全部集合,计算集合中的和,推断集合里面的团体是否为关键团队. 代码: ...

  10. android传感器;摇抽奖功能

    package com.kane.sensortest; import java.util.Random; import android.hardware.Sensor; import android ...