關於CoreData遷移

2021-06-21 22:09:21 字數 1796 閱讀 6133

1.在新專案中新增coredata的類庫,並在***-prefix.h中加入

#import  

2.拷貝原專案中的.xcdatamodeld檔案到新專案中,新增檔案選擇coredata下nsmanagedobject subclass,選擇data models版本,勾選實體。

如果實體已經存在,要手動的刪除原實體。

#pragma mark - core data stack

- (nsmanagedobjectcontext *)managedobjectcontext

nspersistentstorecoordinator*coordinator = [

self

persistentstorecoordinator];

if (coordinator != nil)

return

_managedobjectcontext; }

- (nsmanagedobjectmodel *)managedobjectmodel

nsurl

*modelurl = [[

nsbundle

mainbundle] urlforresource:

@"***"

withextension:

@"momd"];

_managedobjectmodel

= [[

nsmanagedobjectmodel

alloc] initwithcontentsofurl:modelurl];

return

_managedobjectmodel; }

- (nspersistentstorecoordinator *)persistentstorecoordinator

nsstring*storetype = nssqlitestoretype;

nserror *error = null;

nsurl

*storeurl = [[

self

:@"***.sqlite"];

nsdictionary

*options = [

nsdictionary

dictionarywithobjectsandkeys:

[nsnumber

numberwithbool

:yes

], nsmigratepersistentstoresautomaticallyoption,

[nsnumber

numberwithbool

:yes

nil];

_persistentstorecoordinator= [[

nspersistentstorecoordinator

alloc

] initwithmanagedobjectmodel

:self

.managedobjectmodel]; if

(![_persistentstorecoordinator

addpersistentstorewithtype:storetype configuration:

nilurl:storeurl options:options error:&error])

nsassert1

(yes

, @"failed to create store %@ with nssqlitestoretype", [storeurl 

path

]);

}return

_persistentstorecoordinator; }

CoreData版本遷移

如果已經建立好了coredata資料庫,當實體中多了乙個屬性的時候,我們直接去更改資料表中實體,為其增添屬性會發生錯誤,此時需要通過版本更新的方式解決這個問題.1.新增乙個model version檔案 2.設定使用以後要使用的版本 4.刪除之前版本中person實體對應的類,用新版本的person...

Core Data 輕量級遷移

如果只是簡單的改變模型,比如給乙個實體新增乙個新屬性,core data 可以自動進行資料遷移,也就是指輕量級遷移。輕量級遷移基本上和普通遷移是一樣的,不過不需要提供對映模型,在對映概況中有介紹 core data自行推斷新模型和目標模型的差異。輕量級遷移在應用開發的早期階段使用非常方便,當你頻繁的...

CoreData的資料遷移

很多人說coredata坑多,現在才感覺到,今天上午寫 的時候,發現了乙個大問題.其實很多簡單的情況,不用這麼麻煩,coredata提供了輕量級的自動資料遷移,比如以下三個情況會自動進行 1.簡單的增加乙個字段 2.把乙個必填字段改為可選字段 3.把可選字段改為必填字段 但一定要定義預設值 1.公升...