CoreData是iOS5之后才出現(xiàn)的一個框架,提供了直接使用SQLite數(shù)據(jù)庫的大部分靈活性,它提供了對象-關(guān)系映射(ORM)的功能,即能夠?qū)C對象轉(zhuǎn)化成數(shù)據(jù),保存在SQLite數(shù)據(jù)庫文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫中的數(shù)據(jù)還原成OC對象,通過CoreData管理應(yīng)用程序的數(shù)據(jù)模型,可以極大程度減少需要編寫的代碼數(shù)量!
CoreData的簡單封裝(增、刪、改、查)
獲取上下文
#pragma mark - Getter
- (NSManagedObjectContext *)context{
if (!_context){
AppDelegate *delegate = (AppDelegate *)UIApplication.sharedApplication.delegate;
_context = delegate.persistentContainer.viewContext;
}
return _context;
}
1.添加數(shù)據(jù)
pragma mark - 添加數(shù)據(jù)
- (BOOL)insertWithTableName:(NSString *)tableName propertits:(NSDictionary *)propertits{
NSManagedObject *entity = [NSEntityDescription insertNewObjectForEntityForName:tableName inManagedObjectContext:self.context];
for (NSString *key in propertits.allKeys) {
id value = [propertits objectForKey:key];
[entity setValue: value forKey:key];
}
NSError *error = nil;
if (![self.context save:&error]){
NSLog(@"%@",error);
return false;
}else{
return true;
}
}
2.刪除數(shù)據(jù)
#pragma mark - 刪除數(shù)據(jù)
- (BOOL)deleteWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate{
NSError *error = nil;
NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
fetchRequst.predicate = predicate;
NSMutableArray *result = [[self.context executeFetchRequest:fetchRequst error:&error] mutableCopy];
for (id obj in result) {
[self.context deleteObject:obj];
}
if (![self.context save:&error]){
NSLog(@"%@",error);
return false;
}else{
return true;
}
}
- (BOOL)deleteWithTableName:(NSString *)tableName{
return [self deleteWithTableName:tableName predicate:nil];
}
3.修改數(shù)據(jù)
#pragma mark - 修改數(shù)據(jù)
- (BOOL)modifyWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate properties:(NSDictionary *)propertites{
NSError *error = nil;
NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
fetchRequst.predicate = predicate;
NSMutableArray *result = [[self.context executeFetchRequest:fetchRequst error:&error] mutableCopy];
for (id obj in result) {
for (NSString *key in propertites.allKeys) {
id value = [propertites objectForKey:key];
[obj setValue:value forKey:key];
}
}
if (![self.context save:&error]){
NSLog(@"%@",error);
return false;
}else{
return true;
}
}
4.查詢數(shù)據(jù) <異步和同步查詢>
#pragma mark - 查詢數(shù)據(jù)
- (void)queryAsyncWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate sort:(NSSortDescriptor *)sort fetchResultHandler:(FetchResultHandlder)handler{
NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
if (sort.key != nil){
fetchRequst.sortDescriptors = @[sort];
}
NSAsynchronousFetchRequest *asyncFetchRequst = [[NSAsynchronousFetchRequest alloc]initWithFetchRequest:fetchRequst completionBlock:^(NSAsynchronousFetchResult * result) {
NSArray *rst = result.finalResult;
handler(rst);
}];
NSError *error = nil;
if (![self.context executeRequest:asyncFetchRequst error:&error]){
NSLog(@"%@",error);
}
}
- (void)queryAsyncWithTableName:(NSString *)tableName fetchResultHandler:(FetchResultHandlder)handler{
[self queryAsyncWithTableName:tableName predicate:nil sort:[[NSSortDescriptor alloc]init] fetchResultHandler:handler];
}
- (void)querySyncWithTableName:(NSString *)tableName predicate:(NSPredicate *)predicate sort:(NSSortDescriptor *)sort fetchResultHandler:(FetchResultHandlder)handler{
NSFetchRequest *fetchRequst = [NSFetchRequest fetchRequestWithEntityName:tableName];
fetchRequst.predicate = predicate;
if (sort.key != nil){
fetchRequst.sortDescriptors = @[sort];
}
NSError *error = nil;
NSArray * result = [self.context executeFetchRequest:fetchRequst error:&error];
if (![self.context save:&error]){
NSLog(@"%@",error);
}
handler(result);
}
- (void)querySyncWithTableName:(NSString *)tableName fetchResultHandler:(FetchResultHandlder)handler{
[self querySyncWithTableName:tableName predicate:nil sort:[[NSSortDescriptor alloc]init] fetchResultHandler:handler];
}
參考:
http://www.itdecent.cn/p/332cba029b95
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。