寫在前面
最近嘗嘗鮮升級(jí)了Xcode8.0,誰(shuí)曾想遇到了一個(gè)又一個(gè)“坑”,其中我覺得尤為值得記錄的一個(gè)就是coreData的使用捧灰,記錄于此,供大家討論
PS:我對(duì)coreData了解連皮毛也算不上荚板,之前在項(xiàng)目中用到了凤壁,也是在別人建好表的基礎(chǔ)上仿寫出來的??,后續(xù)也沒有進(jìn)行深入的學(xué)習(xí)跪另,近期又用到coreData拧抖,發(fā)現(xiàn)Xcode8.0下不是原來那樣用了,網(wǎng)上找了半天免绿,同病相憐的人不少唧席,可都無(wú)解決之法,那我就第一個(gè)吃螃蟹吧,文采有限淌哟,不喜勿噴迹卢,如有錯(cuò)誤還望善意指出,大家共同進(jìn)步??
- 第一步:找到后綴為.xcdatamodeld的模型文件
- 第二步:在模型文件中添加項(xiàng)目中需要的Entity實(shí)體
- 第三步:在創(chuàng)建好的entity中添加Attribute
接下來徒仓,大家是不是認(rèn)為該右擊模型文件選擇 new file了腐碱,如果你點(diǎn)擊了就會(huì)發(fā)現(xiàn),原本coredata的三個(gè)選項(xiàng)只剩了兩個(gè)
下面是正確步驟哦
- 第四步:點(diǎn)擊導(dǎo)航欄的Editor
- 第五步:選擇Create NSManagedObject Subclass...然后就是下一步掉弛、下一步症见。。谋作。。
以上步驟完成后遵蚜,創(chuàng)建工作基本上就好了奈惑,讓我們比較一下生成的文件較之前有什么不同
- 如圖吭净,綠色框框中是我之前創(chuàng)建的,粉紅色框框是我升級(jí)xcode8.0后創(chuàng)建的携取,顯然多了一個(gè)實(shí)體名+CoreDataClass的文件,少了實(shí)體名的模型文件雷滋,Why文兢?哈哈其實(shí)它倆是一回事晤斩,換了個(gè)名字而已??
下面是CoreData常用操作代碼記錄
- 添加數(shù)據(jù),示例代碼如下:
-(void)addHistoryInfoToRWList:(NSString *)historyStr{
NSManagedObjectContext *cusMoc = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
NSManagedObjectContext *cusMoc1 = [self myContext:cusMoc];
if (cusMoc1!=nil) {
//從core data 拉取數(shù)據(jù)
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"historyRWInfo='%@' ",historyStr]];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RWHistory" inManagedObjectContext:cusMoc1];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [cusMoc1 executeFetchRequest:fetchRequest error:&error];
if (!error) {
if (fetchedObjects.count>0) {
for (NSManagedObject *obj in fetchedObjects)
{
//刪除數(shù)據(jù)
[cusMoc1 deleteObject:obj];
if (![cusMoc1 save:&error])
{
return;
}
}
}
//不存在數(shù)據(jù)時(shí)姆坚,插入數(shù)據(jù)
RWHistory *myHxInfo = [NSEntityDescription insertNewObjectForEntityForName:@"RWHistory" inManagedObjectContext:cusMoc1];
myHxInfo.historyRWInfo=historyStr;
[cusMoc1 save:&error];
}
}}
- 刪除數(shù)據(jù),示例代碼如下
-(void)deleteRWHistory{
NSManagedObjectContext *cusMoc = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
NSManagedObjectContext *cusMoc1 = [self myContext:cusMoc];
if (cusMoc1!=nil) {
//從core data 拉取數(shù)據(jù)
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RWHistory" inManagedObjectContext:cusMoc1];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [cusMoc1 executeFetchRequest:fetchRequest error:&error];
if (!error) {
for (NSManagedObject *obj in fetchedObjects)
{
//刪除數(shù)據(jù)
[cusMoc1 deleteObject:obj];
if (![cusMoc1 save:&error])
{
return;
}
}
}
}}
- 獲取數(shù)據(jù)兔辅,示例代碼如下:
-(NSMutableArray *)getRWHistory{
NSManagedObjectContext *cusMoc = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
NSManagedObjectContext *cusMoc1 = [self myContext:cusMoc];
if (cusMoc1!=nil) {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RWHistory" inManagedObjectContext:cusMoc1];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [cusMoc1 executeFetchRequest:fetchRequest error:&error];
NSMutableArray * hisArr=[NSMutableArray array];
for (RWHistory * model in fetchedObjects) {
[hisArr insertObject:model atIndex:0];
}
if (!error) {
return hisArr;
}
return nil;
}else{
return nil;
}}
OK寫完了击喂,如果有錯(cuò)誤啊、不足啊懂昂,希望大家給我指出來哈,三克油??喜歡的點(diǎn)個(gè)??!還有我的第一篇文章 01-iOS總結(jié):項(xiàng)目中的各種小坑匯總