亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CoreData教學完整版(封裝我們自己的CoreData工具)_Dylan

2019-11-14 19:59:46
字體:
來源:轉載
供稿:網友

1. 今天的課程、 大家在學習之后肯定會有另一番想法、

至少、 你們會收藏我的博客吧、嘿嘿、 新開的人氣可不怎么高

 

2. 好、 廢話不多說、 直接切入正題、 網上講coreData的有好多、 但大多數不怎么細致、 也不會完整的敲代碼、

所以、 今天上午我自己簡單的封裝一下coreData供自己使用。 大家可以借鑒一下。 又不足之處還望指出。

3. 開始編碼:

  1. 導入 coreData.FrameWork   我們今天封裝的東西、 不實用系統自帶的coreData、 而是導入庫自己去寫。 加深印象

  思想: 單例 + 中間層 (中間層繼承于NSManagedObject 方便我們操作、 也有住于在業務量大的時候優化代碼)

  總共4個文件 我們開始編碼:

  1、單例 ADCoreData.h

  

 1 // 2 //  ADCoreData.h 3 //  CoreData_CE 4 // 5 //  Created by Dylan on 14-10-11. 6 //  Copyright (c) 2014年 Dylan. All rights reserved. 7 // 8  9 /*!10  *  @Author Dylan.11  *12  *  Please add CoreData.FrameWork13  */14 15 #import <Foundation/Foundation.h>16 #import <CoreData/CoreData.h>17 18 @interface ADCoreData : NSObject19 20 /*!21  *  @Author Dylan.22  *23  *  context24  */25 @PRoperty (nonatomic, strong, readonly) NSManagedObjectContext * manageContext;26 27 + (instancetype)shareInstanceWithStoreName: (NSString *)storeName;28 29 /*!30  *  @Author Dylan.31  *32  *  Methods33  */34 35 - (NSMutableArray *)findByModel: (id)model;36 - (NSMutableArray *)findByModel: (id)model37                    predicateString: (NSString *)predicateString;38 /*!39  *  Update40  */41 - (BOOL)create: (id)model;42 43 - (BOOL)remove: (id)model;44 - (BOOL)remove: (id)model45       predicateString: (NSString *)predicateString;46 - (BOOL)modify: (id)model47  predicateString: (NSString *)predicateString;48 49 @end

  ADCoreData.m

  1 //  2 //  ADCoreData.m  3 //  CoreData_CE  4 //  5 //  Created by Dylan on 14-10-11.  6 //  Copyright (c) 2014年 Dylan. All rights reserved.  7 //  8   9 #import "ADCoreData.h" 10 #import "ADCoreDataManager.h" 11 #import <objc/runtime.h> 12  13 #define CLASS_NAME(PRAM) NSStringFromClass([PRAM class]) 14  15 @interface ADCoreData () 16  17 @property (nonatomic, strong) NSManagedObjectModel * managedobjectModel; 18 @property (nonatomic, strong) NSPersistentStoreCoordinator * persistentStoreCoordinator; 19  20 /*! 21  *  @Author Dylan. 22  * 23  *  storeName 24  */ 25 @property (nonatomic, strong) NSString * storeName; 26  27 - (NSURL *)applicationDomainUrl; 28  29 @end 30  31 static ADCoreData * coreData; 32  33 @implementation ADCoreData 34  35 + (instancetype)shareInstanceWithStoreName:(NSString *)storeName { 36     static dispatch_once_t onceToken; 37     dispatch_once(&onceToken, ^{ 38         coreData = [[self alloc] init]; 39         coreData.storeName = storeName; 40     }); 41      42     return coreData; 43 } 44  45 /*! 46  *  @Author Dylan. 47  * 48  *  synthesize 49  */ 50 @synthesize manageContext = _manageContext; 51 @synthesize managedobjectModel = _managedobjectModel; 52 @synthesize persistentStoreCoordinator = _persistentStoreCoordinator; 53  54 #pragma mark - 55 #pragma mark - GET 56 - (NSManagedObjectContext *)manageContext { 57      58     if (_manageContext) { 59         return _manageContext; 60     } 61      62     NSPersistentStoreCoordinator * coordinator = [self persistentStoreCoordinator]; 63     if (coordinator != nil) { 64         _manageContext = [[NSManagedObjectContext alloc] init]; 65         [_manageContext setPersistentStoreCoordinator:coordinator]; 66     } 67     return _manageContext; 68 } 69  70 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 71      72     if (_persistentStoreCoordinator) { 73         return _persistentStoreCoordinator; 74     } 75      76     NSURL * storeUrl = [[self applicationDomainUrl] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.sqlite", _storeName]]; 77     _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedobjectModel]; 78     [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:nil]; 79     return _persistentStoreCoordinator; 80 } 81  82 - (NSManagedObjectModel *)managedobjectModel { 83      84     if (_managedobjectModel) { 85         return _managedobjectModel; 86     } 87      88     NSURL * modelUrl = [[NSBundle mainBundle] URLForResource:_storeName withExtension:@"momd"]; 89     _managedobjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; 90     return _managedobjectModel; 91 } 92  93 #pragma mark - Methods 94 - (NSMutableArray *)findByModel: (id)model { 95      96     NSError * error = nil; 97     NSArray * listArray = [_manageContext executeFetchRequest:[self bindRequest:CLASS_NAME(model) predicate:nil] error:&error]; 98     NSMutableArray * resultArray = [NSMutableArray array]; 99     100     for (ADCoreDataManager * manager in listArray) {101         102         for (NSString * propertyName in [self ClassAttributes:model]) {103             [model setValue:[manager valueForKey:propertyName] forKey:propertyName];104         }105         [resultArray addObject:model];106     }107     return resultArray;108 }109 110 - (NSMutableArray *)findByModel: (id)model111                 predicateString: (NSString *)predicateString; {112     113     NSError * error = nil;114     NSArray * listArray = [_manageContext executeFetchRequest:[self bindRequest:CLASS_NAME(model) predicate:predicateString] error:&error];115     NSMutableArray * resultArray = [NSMutableArray array];116     117     if (listArray.count >= 1) {118         for (ADCoreDataManager * manager in listArray) {119             120             for (NSString * propertyName in [self ClassAttributes:model]) {121                 [model setValue:[manager valueForKey:propertyName] forKey:propertyName];122             }123             [resultArray addObject:model];124         }125     }126     return resultArray;127 }128 129 #pragma mark update130 - (BOOL)create: (id)model {131     ADCoreDataManager * manager = [NSEntityDescription insertNewObjectForEntityForName:CLASS_NAME(model) inManagedObjectContext:_manageContext];132     133     for (NSString * propertyName in [self ClassAttributes:model]) {134         [manager setValue:[model valueForKey:propertyName] forKey:propertyName];135     }136     BOOL result = [self saveContext];137     return result;138 }139 140 - (BOOL)remove: (id)model {141     142     NSError * error = nil;143     NSArray * listArray = [_manageContext executeFetchRequest:[self bindRequest:CLASS_NAME(model) predicate:nil] error:&error];144     if (listArray.count > 0) {145         for (ADCoreDataManager * manager in listArray) {146             [_manageContext deleteObject:manager];147         }148     }149     return [self saveContext];150 }151 152 - (BOOL)remove: (id)model153 predicateString: (NSString *)predicateString {154     155     NSError * error = nil;156     NSArray * listArray = [_manageContext executeFetchRequest:[self bindRequest:CLASS_NAME(model) predicate:predicateString] error:&error];157     158     if (listArray.count > 0) {159         for (ADCoreDataManager * manager in listArray) {160             [_manageContext deleteObject:manager];161         }162     }163     return [self saveContext];164 }165 166 - (BOOL)modify: (id)model167  predicateString: (NSString *)predicateString {168     169     NSError * error = nil;170     NSArray * listArray = [_manageContext executeFetchRequest:[self bindRequest:CLASS_NAME(model) predicate:predicateString] error:&error];171     172     if (listArray.count > 0) {173         174         for (ADCoreDataManager * manager in listArray) {175             for (NSString * propertyName in [self ClassAttributes:model]) {176                 [manager setValue:[model valueForKey:propertyName] forKey:propertyName];177             }178         }179     }180     return [self saveContext];181 }182 183 #pragma mark - collect184 - (NSFetchRequest *)bindRequest: (NSString *)className185           predicate: (NSString *)predicateString {186     NSFetchRequest * request = [[NSFetchRequest alloc] init];187     [request setEntity:[NSEntityDescription entityForName:className inManagedObjectContext:_manageContext]];188     189     if (predicateString != nil) {190         NSPredicate * predicate = [NSPredicate predicateWithFormat:predicateString];191         NSLog(@"%@", predicate);192         NSLog(@"%@", predicateString);193         [request setPredicate:predicate];194     }195     return request;196 }197 198 199 #pragma mark - save200 - (BOOL)saveContext {201     202     NSManagedObjectContext * context = [self manageContext];203     if (context != nil) {204         205         NSError * error = nil;206         if ([context hasChanges] && ![context save:&error]) {207             NSLog(@"%@", [error userInfo]);208             abort();209             return NO;210         }211     }212     213     return YES;214 }215 216 217 - (NSURL *)applicationDomainUrl {218     return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];219 }220 221 #pragma mark - allAttributes222 - (NSMutableArray *) ClassAttributes: (id)classModel {223     224     NSMutableArray * array = [NSMutableArray array];225     NSString *className = NSStringFromClass([classModel class]);226     const char * cClassName = [className UTF8String];227     228     id classM = objc_getClass(cClassName);229     unsigned int outCount, i;230     objc_property_t * properties = class_copyPropertyList(classM, &outCount);231     for (i = 0; i < outCount; i++) {232         objc_property_t property = properties[i];233         NSString * attributeName = [NSString stringWithUTF8String:property_getName(property)];234         235         [array addObject:attributeName];236     }237     return array;238 }239 240 @end

  在m文件中, 我使用了運行時。  運行時拿到一個模型的屬性 這樣我們可以更加方便的使用KVC

  大家仔細看一下這種封裝的過程  

2.中間層: ADCoreDataManager.h

  

 1 // 2 //  ADCoreDataManager.h 3 //  CoreData_CE 4 // 5 //  Created by Dylan on 14-10-11. 6 //  Copyright (c) 2014年 Dylan. All rights reserved. 7 // 8  9 #warning add Model properties Here10 11 #import <CoreData/CoreData.h>12 #import <Foundation/Foundation.h>13 14 @interface ADCoreDataManager : NSManagedObject15 16 /*!17  *  @Author Dylan.18  *19  *  e.g20  */21 @property (nonatomic, strong) NSString * name;22 23 @end

  .m文件

  

 1 // 2 //  ADCoreDataManager.m 3 //  CoreData_CE 4 // 5 //  Created by Dylan on 14-10-11. 6 //  Copyright (c) 2014年 Dylan. All rights reserved. 7 // 8  9 #warning don't forget write @synthesize10 11 #import "ADCoreDataManager.h"12 13 @implementation ADCoreDataManager14 15 @synthesize name = _name;16 17 - (void)setValue:(id)value forUndefinedKey:(NSString *)key {18     19 }20 21 @end

  大家可以把所有模型的屬性 扔到中間層里邊。  使用中間層去做中介傳值。

 

  使用:

  1. 創建自己的momd文件。   新建-》coredata-》model 創建之后添加模型

  2. 初始化單例

  附上測試代碼

  

 1 // test 2     ADCoreData * coreData = [ADCoreData shareInstanceWithStoreName:@"CoreData"]; 3      4     Dylan * dylan = [[Dylan alloc] initWithEntity:[NSEntityDescription entityForName:@"Dylan" inManagedObjectContext:coreData.manageContext] insertIntoManagedObjectContext:nil]; 5     [dylan setName:@"Dylan"]; 6      7     NSLog(@"**************************************************"); 8      9     NSLog(@"first = %@", [coreData findByModel:dylan]);10     11     NSLog(@"**************************************************");12     13     [coreData create:dylan];14     NSLog(@"second = %@", [coreData findByModel:dylan]);15     NSLog(@"third = %@", [coreData findByModel:dylan predicateString:@"name = 'Dylan'"]);16     NSLog(@"**************************************************");17     18     [coreData remove:dylan];19     NSLog(@"fourth = %@", [coreData findByModel:dylan]);20     NSLog(@"**************************************************");21     22     [coreData create:dylan];23     NSLog(@"fifth = %@", [coreData findByModel:dylan]);24     25     NSLog(@"**************************************************");26     27     Dylan * dylan1 = [[Dylan alloc] initWithEntity:[NSEntityDescription entityForName:@"Dylan" inManagedObjectContext:coreData.manageContext] insertIntoManagedObjectContext:nil];28     dylan1.name = @"dylan-1";29     30     [coreData modify:dylan1 predicateString:nil];31     NSLog(@"sixth = %@", [coreData findByModel:dylan]);32     NSLog(@"seventh = %@", [coreData findByModel:dylan1]);

  CoreData書寫雖然比較難, 但是操作方便

  大家在使用謂詞的時候 要特別的注意  在你的值上邊加單引號 類似: name = 'Dylan' 防止CoreData在操作request請求時候出現錯誤

  @Dylan.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频yy9099| 亚洲成人性视频| 97精品国产97久久久久久春色| 九九热视频这里只有精品| 黑人极品videos精品欧美裸| 午夜剧场成人观在线视频免费观看| 亚洲人成人99网站| 97国产在线观看| 2019中文字幕在线观看| 欧美激情视频网| 亚洲欧美三级伦理| 91禁国产网站| 国产欧美一区二区三区视频| 日韩在线观看av| 日本中文字幕久久看| 国内精品久久久| 一本一道久久a久久精品逆3p| 亚洲免费影视第一页| 亚洲自拍小视频免费观看| 精品一区二区亚洲| 2019中文字幕在线观看| 日韩在线激情视频| 国产精品永久免费在线| 精品国产一区久久久| 色综合久综合久久综合久鬼88| 亚洲欧美精品在线| 伊人青青综合网站| 亚洲视频在线免费观看| 国产日韩换脸av一区在线观看| 91精品在线播放| 欧洲中文字幕国产精品| 成人激情春色网| 中文字幕精品av| 亚洲老头同性xxxxx| 久久精品99无色码中文字幕| 久久久久久久一区二区三区| 欧美成人午夜免费视在线看片| 亚洲国产高清高潮精品美女| 国产精品 欧美在线| 亚洲精品丝袜日韩| 亚洲欧美国产日韩中文字幕| 亚洲欧美第一页| 亚洲精品乱码久久久久久金桔影视| 久久久精品一区二区三区| 日本一区二区三区四区视频| 久久中文字幕在线视频| 亚洲欧美日韩第一区| 欧美高清videos高潮hd| 日韩av电影院| 亚洲图片在线综合| 国产97色在线|日韩| 日本一欧美一欧美一亚洲视频| 精品视频—区二区三区免费| 亚洲第一区第二区| 欧美日韩中文字幕综合视频| 国内免费精品永久在线视频| 91视频国产精品| 黄色精品一区二区| 上原亚衣av一区二区三区| 国产日韩av在线播放| 国产日韩亚洲欧美| 亚洲精品福利在线| 日韩在线视频线视频免费网站| 日韩av在线免费看| 国产精品直播网红| 原创国产精品91| 亚洲韩国欧洲国产日产av| 亚洲人高潮女人毛茸茸| 欧美日韩一区免费| 精品爽片免费看久久| 欧美成人剧情片在线观看| 欧美日韩中国免费专区在线看| 国产成人久久久| 韩国三级电影久久久久久| 在线性视频日韩欧美| 黑人精品xxx一区一二区| 欧美电影在线观看高清| 日韩av三级在线观看| 91高潮在线观看| 国产精品一区二区久久久久| 欧美性xxxx极品hd欧美风情| 欧美在线视频一区| 欧美成人精品一区二区| 精品欧美国产一区二区三区| 国产色婷婷国产综合在线理论片a| 中文字幕亚洲二区| 欧美成人免费一级人片100| 国产精品欧美激情在线播放| 久久成人综合视频| 在线播放日韩av| 欧美日韩国产二区| 国产精品久久久久aaaa九色| 欧美日韩国产精品一区二区三区四区| 91禁国产网站| 国产综合久久久久| 国产精品久久中文| 久热精品视频在线免费观看| 日韩在线观看高清| 亚洲欧美中文日韩在线v日本| 91免费精品国偷自产在线| 国产日本欧美在线观看| 成人有码在线播放| 92福利视频午夜1000合集在线观看| 欧美电影在线观看网站| 久久精品国产免费观看| 精品久久久久久久久久| 亚洲一区二区久久久久久| 欧美在线视频免费播放| 97精品在线视频| 亚洲第一免费播放区| 91黑丝高跟在线| 久久久久久久久爱| 亚洲人成电影网站| 欧美黑人国产人伦爽爽爽| 久久成人亚洲精品| 国内精品久久久久久中文字幕| 成年无码av片在线| 尤物yw午夜国产精品视频| 国产精品日韩一区| 国产精品免费在线免费| 欧美激情在线观看| 理论片在线不卡免费观看| 亚洲xxxx妇黄裸体| 亚洲最新视频在线| 国产乱肥老妇国产一区二| 日本精品免费一区二区三区| 欧美激情videoshd| 中文字幕精品视频| 久久国产精品影视| 日韩在线视频免费观看高清中文| 日韩av在线天堂网| 亚洲a级在线播放观看| 久久九九亚洲综合| 国产成人免费av| 国产视频久久久| 精品国产美女在线| 欧美电影在线观看网站| 日韩在线视频免费观看高清中文| 久久福利网址导航| 欧美激情va永久在线播放| 精品中文字幕在线| 丝袜美腿精品国产二区| 中文字幕亚洲欧美一区二区三区| 国产精品尤物福利片在线观看| 亚洲全黄一级网站| 欧美日韩午夜视频在线观看| 国产精品女主播视频| 日韩黄色av网站| 亚洲aⅴ日韩av电影在线观看| 国产精品成人免费视频| 日韩激情视频在线| 中文字幕日韩欧美| 97视频在线观看免费高清完整版在线观看| 正在播放欧美视频| 成人精品久久一区二区三区| 亚州av一区二区| 国产精品吴梦梦| 国产69精品久久久| 欧美另类在线观看| 久久久久久久电影一区| 精品亚洲男同gayvideo网站| 日韩精品视频免费专区在线播放| 欧美在线亚洲在线| 最新国产精品亚洲|