coreData数据库简单项目案列
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)NSManagedObjectContext *context;
@property (nonatomic,strong)NSMutableArray *dataSoure;
@property (nonatomic,strong)UITableView *tablew;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction)];
[self prepareForCoreData];
[self initTableView];
}
- (void)initTableView{
self.tablew = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
self.tablew.delegate = self;
self.tablew.dataSource = self;
[self.view addSubview:self.tablew];
}
- (void)addAction{
[self showAlertWithFriend:nil];
}
- (void)saveAction:(UIAlertController *) alert{
UITextField *usernameText = alert.textFields.firstObject;
UITextField *personIdText = alert.textFields.lastObject;
NSString *username= usernameText.text;
NSNumber *personId = @(personIdText.text.integerValue);
Person * person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context];
person.name = username;
person.personID = personId;
[self.context save:nil];
[self.dataSoure addObject:person];
[self.tablew reloadData];
}
#pragma mark ---协议方法----
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataSoure.count;
}
- (UITableViewCell * )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *reuseid = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseid];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseid];
}
// 展示
Person *p = self.dataSoure[indexPath.row];
cell.textLabel.text = p.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", p.personID];
return cell;
}
#pragma mark ---数据库协议----
- (void)prepareForCoreData{
self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
// 找地址
// .xcdatamodeld 文件, 编译后, 会生成 .momd 这样的文件
// 所以, 我们找 .momd 类型即可
NSString *path = [[NSBundle mainBundle] pathForResource:@"CoreDataProject" ofType:@"momd"];
// 实例化数据存储模型
// 在这里, 需要传入 xcdatamodeld 文件的地址
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];
// 实例化数据持久存储协调器
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 设置数据库文件保存的路径
// ~/
NSString *storePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/xiaoqiang.db"];
// 设置存储类型
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:storePath] options:nil error:nil];
[self.context setPersistentStoreCoordinator:coordinator];
}
#pragma mark ---选中回调---
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// [self showAlertWithFriend:nil];
//改弹窗
[self showAlertWithFriend:self.dataSoure[indexPath.row]];
}
#pragma mark ---弹窗展示
- (void)showAlertWithFriend:(Person *)person{
// [self a]
NSLog(@"进来了");
//如果模型存在,表示修改操作
//如果模型不存在,表示增的操作
UIAlertController *altert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请输入用户信息" preferredStyle:UIAlertControllerStyleAlert];
//添加输入框
[altert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
// 这里写输入框的配置属性
textField.placeholder =@"请输入姓名";
//输入框文本 可以编辑
textField.font = [UIFont systemFontOfSize:13];
textField.text = person.name;
}];
[altert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
// 这里写输入框的配置属性
textField.placeholder =@"请输入手机号码";
//输入框文本 可以编辑
textField.font = [UIFont systemFontOfSize:13];
NSString *str = [NSString stringWithFormat:@"%@",person.personID];
textField.text = str;
//
// textField.keyboardType = UIKeyboardTypeNumberPad;
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *done = [UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
// [self addAction:altert];
// 区分不同的情况, 分别调用
// person如果存在, 表示是改的操作
// person如果不存在, 表示是增的操作
if (person) {
[self updateAction:altert person:person];
}
else{
[self saveAction:altert];
}
}];
[altert addAction:cancel];
[altert addAction:done];
[self presentViewController:altert animated:YES completion:nil];
}
- (void)updateAction:(UIAlertController *)altert person:(Person *)person{
//2.本地修改
//需要一个新的模型来存储新的内容
UITextField *usernameText = altert.textFields.firstObject;
UITextField *phoneText = altert.textFields.lastObject;
// Person *newPerson = [[Person alloc] init];
person.name = usernameText.text;
// newPerson.name = usernameText.text;
// ;
person.personID = [NSNumber numberWithFloat:[phoneText.text floatValue]];
// newPerson.personID = [NSNumber numberWithFloat:[phoneText.text floatValue]];
/**修改界面显示*/
//找出一个元素在数组中的下标
NSInteger index = [self.dataSoure indexOfObject:person];
[self.dataSoure replaceObjectAtIndex:index withObject:person];
//刷新表格
[self.tablew reloadData];
// NSInteger indexTWo = [[self findAll] indexOfObject:person];
// Person *persont = [self findAll][indexTWo];
// persont.name = usernameText.text;
// persont.personID = [NSNumber numberWithFloat:[phoneText.text floatValue]];
[self.context save:nil];
}
#pragma mark ---滑动删除---
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// 获取这一行显示的数据
Person *p = self.dataSoure[indexPath.row];
// 1. 从界面显示删除
[self.dataSoure removeObject:p];
[self.tablew reloadData];
// 2. 从本地缓存中删除
[self.context deleteObject:p];
[self.context save:nil];
}
- (NSArray *)findAll{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
return [self.context executeFetchRequest:request error:nil];
}
#pragma mark ----懒加载---
- (NSMutableArray *)dataSoure{
if (_dataSoure == nil) {
_dataSoure = [[NSMutableArray alloc] init];
[_dataSoure addObjectsFromArray:[self findAll]];
}
return _dataSoure;
}
@end
Person类
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Person : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * personID;
@end
#import "Person.h"
@implementation Person
@dynamic name;
@dynamic personID;
@end
coreData案列1.png
coreData案列2.png
coreData数据库简单项目案列1.png
coreData数据库简单项目案列2.png
网友评论