問(wèn)題
在Xcode 升級(jí)到 8 以上的版本后,可視界面創(chuàng)建CoreData模型.xcdatamodeld
后使用Editor->Create NSManagedObject Subclass后會(huì)發(fā)生編譯錯(cuò)誤 : duplicate error
錯(cuò)誤原因:
Xcode8.0中包含了一個(gè)自動(dòng)生成NSManagedObject的機(jī)制掸哑,如果你打開(kāi)該機(jī)制則會(huì)在project(Derived Data目錄中)實(shí)際生成的DerivedSources文件夾中出現(xiàn)同名的源代碼文件蔗草。
也就是說(shuō) 就算你不新建這個(gè)類的文件,編譯器已經(jīng)是會(huì)有這個(gè)文件的了(所以可以直接在你的代碼直接調(diào)用.xcdatamodeld
中定義的entity橱赠,而無(wú)需創(chuàng)建文件)
個(gè)人看法:
此功能有好有壞:
好的方面:在代碼編碼的角度來(lái)看尤仍,數(shù)據(jù)庫(kù)的entity應(yīng)該獨(dú)立出來(lái)管理,與entity相關(guān)的東西都不應(yīng)該寫在entity的類中狭姨,如果遵循這種編碼思想來(lái)編碼的話宰啦,無(wú)疑這個(gè)功能會(huì)使我們少做創(chuàng)建類的步驟
壞的方面:開(kāi)源的很多開(kāi)源coredata工具庫(kù)都會(huì)讓開(kāi)發(fā)者在entity類中實(shí)現(xiàn)類似
+(NSString *)primaryKey
等方法來(lái)定制每一種entity的功能、屬性饼拍、用法等赡模。
解決問(wèn)題
- 如果是原本就進(jìn)行邏輯隔離或沒(méi)有使用任何的庫(kù):
刪掉創(chuàng)建的類,直接在你想調(diào)用的地方直接打出Entity的名稱师抄,你會(huì)發(fā)現(xiàn)會(huì)有提示(的確是很方便的功能)
*如果引用了庫(kù)或想在類中添加邏輯方法:
1 . 打開(kāi)你的.xcdatamodeld
文件
2 . 選中你的entity漓柑,修改tools version為7.3(順帶提醒language不要錯(cuò)了),修改codegen
3 .然后就可以按照xcode8之前的做法一樣,創(chuàng)建一個(gè)類,而且這個(gè)時(shí)候并不會(huì)duplicate error了
PS
**由于xcode抽風(fēng)辆布,上面修改的東西有可能不能真實(shí)被保存瞬矩,如果修改后依然有問(wèn)題,請(qǐng)?jiān)囋囈韵虏僮?: **
- Xcode的頂部選項(xiàng) -> File -> save
- Xcode的頂部選項(xiàng) -> Product -> clean
- 重啟Xcode查看修改是否真正被應(yīng)用