這邊我將如何使用CoreData的示例代碼記錄下來,不再截圖說明如何創建model模型了,截圖上傳麻煩(公司網限速)
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "Student+CoreDataClass.h"
@interface CQ_CoreDataSource : NSObject
- (BOOL)insertDataWithModel:(Student *)model;
- (BOOL)delegateWithKey:(NSString *)key predicate:(id)pre;
- (BOOL)updateWithKey:(NSString *)key predicate:(NSString *)pre NewValue:(NSString *)NewValue;
- (NSArray *)readDatWithKey:(NSString *)Key predicate:(NSString *)pre;
-(NSArray *)sortData;
@end
下面是.m中的實現代碼
#import "CQ_CoreDataSource.h"
@interface CQ_CoreDataSource ()
{
NSManagedObjectContext * _context;
NSMutableArray * _dataSource;
}
@end
@implementation CQ_CoreDataSource
- (instancetype)init
{
if (self = [super init]) {
[self creatSqlite];
}
return self;
}
- (void)creatSqlite{
//創建模型對象
//獲取模型路徑
NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"];
//根據模型文件創建模型對象
NSManagedObjectModel *model = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl];
//創建持久化存儲助理:數據庫
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
//數據庫的名稱和路徑
NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath = [docStr stringByAppendingPathComponent:@"coreData.sqlite"];
NSLog(@"數據庫 path = %@", sqlitePath);
NSURL *sqlUrl = [NSURL fileURLWithPath:sqlitePath];
NSError *error = nil;
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:nil error:&error];
if (error) {
NSLog(@"添加數據庫失敗:%@",error);
}else
{
NSLog(@"添加數據庫成功");
}
//創建上下文 保存信息,操作數據庫
NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
//關聯持久化助理
context.persistentStoreCoordinator = store;
_context = context;
}
- (BOOL)insertDataWithModel:(Student *)model
{
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_context];
student.age = 10;
student.name = @"陳強";
student.sex = @"M";
student.height = 179;
student.number = 90;
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"插入數據庫成功");
return YES;
}else{
NSLog(@"插入數據庫失敗");
return NO;
}
}
- (BOOL)delegateWithKey:(NSString *)key predicate:(id)pre{
//創建刪除請求
NSFetchRequest *deleRequest = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//刪除條件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age < %d",11];
deleRequest.predicate = predicate;
//返回需要刪除的對象數組
NSArray *deleArray = [_context executeFetchRequest:deleRequest error:nil];
//從數據庫中刪除
for (Student *stu in deleArray) {
[_context deleteObject:stu];
}
NSError *error = nil;
//保存--記住保存
if ([_context save:&error]) {
NSLog(@"刪除 age < 10 的數據");
return YES;
}else{
NSLog(@"刪除數據失敗, %@", error);
return NO;
}
}
- (BOOL)updateWithKey:(NSString *)key predicate:(NSString *)pre NewValue:(NSString *)NewValue
{
NSString *str = [NSString stringWithFormat:@"%@ == '%@'",key,pre];
//創建查詢請求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
request.predicate = predicate;
//發送請求
NSArray *resArray = [_context executeFetchRequest:request error:nil];
//修改
for (Student *stu in resArray) {
stu.name = NewValue;
}
//保存
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"保存成功");
return YES;
}else{
NSLog(@"保存失敗");
return NO;
}
}
- (NSArray *)readDatWithKey:(NSString *)Key predicate:(NSString *)pre
{
//創建查詢請求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//查詢條件
NSString *str = [NSString stringWithFormat:@"%@ == '%@'",Key,pre];
NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
request.predicate = predicate;
// //從第幾頁開始查詢
// request.fetchOffset = 0;
//
// //每頁顯示多少條數據
// request.fetchLimit = 6;
//
NSArray *array = [_context executeFetchRequest:request error:nil];
return array;
}
-(NSArray *)sortData{
//創建排序請求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//實例化排序對象
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
NSSortDescriptor *number = [NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES];
request.sortDescriptors = @[sort,number];
//發送請求
NSError *error = nil;
NSArray *resArray = [_context executeFetchRequest:request error:&error];
if (error == nil) {
NSLog(@"排序成功");
}else
{
NSLog(@"排序失敗");
}
return resArray;
}
上面的搜索過濾條件是我自己隨意寫的,自己根據項目需要修改,等週末無事時,我在講完整的如何創建model模型的圖文補上,結合起來在看會比較輕鬆點,