Swift下CoreData的使用
我之前的隨筆中有寫過一些iOS持久化存儲的方法,包含了sqlite、解歸檔、沙盒存放等等。這些方式中,能夠大規模存儲,并保持性能的只有使用sqlite了。而這里將記錄下Cocoa自身繼承的數據庫的存儲方案--CoreData的使用。
CoreData在底層也是直接采用了sqlite等作為數據庫的搭建。只是在上層封裝成Cocoa熟悉的方式,這樣,即使對于不熟悉其他的數據的開發者來說,也不會感到無從下手。 同時CoreData中加入了可視化地操作數據的關聯操作,為我們在Cocoa中使用CoreData提供更方便的途徑。
一、搭建CoreData環境。
搭建CoreData的環境有兩種方式。第一種在項目中搭建,這種方式比較繁瑣,需要開發者指定存儲地址、方式等。除非是在已經開發的項目中添加CoreData,不然不推薦。 第二種方式是在項目創建的時候,勾選User Core Data功能,項目創建之后,會自動創建CoreData的相關代碼。搭建成功之后,在Appdelegate文件中會看到一靜創建后的代碼。接下來在項目中,就可以使用CoreData了。
二、可視化建立項目中的實體
在項目中找到 項目名.xcdatamodeld 文件。這是可視化操作CoreData的窗口。(這個文件只有在添加了CoreData的時候才有,否則需要手動創建。)
在使用開始,這個文件是空的,我們需要添加實體,點擊圖中的窗口底部的 add entiy ,成功之后在左側一欄看到已經添加的實體。
修改名字,這里注意,實體的名字必須是大些字母開頭。
在右側欄中我們看到每個實體有三個小標題: 分別是 屬性(attribute)、關聯(relationship)、Fetched propertries(查詢對象)。
attribute
attribute類似于我們創建一個類的屬性,其實就是NSMangerModel中的屬性。 對一個NSMangerModel類中,所有需要存儲的屬性都可以放在這里。 添加方式是:點擊下方的“+”就可以添加了。attribute 能選擇的類型包括以下:
Undefined: 默認值,參與編譯會報錯
Integer 16: 整數,表示范圍 -32768 ~ 32767
Integer 32: 整數,表示范圍 -2147483648 ~ 2147483647
Integer 64: 整數,表示范圍 –9223372036854775808 ~ 9223372036854775807
Float: 小數,通過MAXFLOAT宏定義來看,最大值用科學計數法表示是 0x1.fffffep+127f
Double: 小數,小數位比Float更精確,表示范圍更大
String: 字符串,用NSString表示
Boolean: 布爾值,用NSNumber表示
Date: 時間,用NSDate表示
Binary Data: 二進制,用NSData表示
Transformable: OC對象,用id表示。可以在創建托管對象類文件后,手動改為對應的OC類名。使用的前提是,這個OC對象必須遵守并實現NSCoding協議
relationship
relationship中描述的是實體與實體之間的關系。有 多對多、多對一、一對多、一對一四種情況可選。
Fetched propertries
Fetched Properties用于定義查詢操作,和NSFetchRequest功能相同。定義fetchedProperty對象后,可以通過NSManagedObjectModel類的fetchRequestFromTemplateWithName:substitutionVariables:方法或其他相關方法獲取這個fetchedProperty對象。 個人覺得這個屬性類似saqlite中的 autoindex。可以作為實體標簽,便于查找。
三、建立實體之間的關聯
建立一個實體之后,其實就已經用來保存實體的實例化對象了。但是有不少情況我們的實體并沒有很單純,可能我們需要在實體中保存的不僅僅是屬性,而是一個個實體。這時候就需要將這一個個實體和主實體關聯起來。 在窗口底部有一排功能按鈕,最右側的按鈕可以選擇實體的展示方式。
我們將之切換到group樣式。
按住Ctrl鍵拖動實體,可以將兩個實體關聯起來。
關聯之后,將實體展示切換會 list 模式,在relationship中看到兩個實體之間的關聯,設置相對應地名字。同時在右側欄中看到一些設置。調整關聯中的一些屬性,比如刪除規則,關聯類型,等等。
創建好實體和關聯關系之后,我們就該創建這些實體的類了。選中項目名.xcdatamodeld 文件,菜單中選擇 EIdtor -> CreartNSmangerObject ,選擇保存的位置即可
最后看到創建好的實體文件。我們將這些看著跟一般的類一樣即可。 只不過,它包含了存儲到CoreData 的API。
四、 如何保存Coredata不支持的屬性
上面講到了attribute只能選擇部分類型。
如果是不支持的類型可以將之設置成Transformable,然后在項目中創建Transformable的子類,實現Transformable類型對要轉化的類型的轉換。這種方式稍稍有點繁瑣。
在這里提供一個小技巧。
在Entity+CoreDataClass文件中,我們可以自定義一些屬性。 通過設置其get和set方法,實現存儲和轉化。具體操作如下:
假如我們需要保存一張圖片大CoreData,顯然直接保存是不可能的,我們可以在實體放置一個image屬性,將其類型設置為 NSData。
再在創建的實體的文件處理如下:
五、 建議使用第三方的框架使用CoreData。
盡管蘋果公司對coreData做了很大的優化,但是使用起來還是略顯麻煩,同學們可以找一些比較好的第三方框架。比如我目前正在使用的MagicalRecord 就很不錯哦。
總結
以上是生活随笔為你收集整理的Swift下CoreData的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE10 开发人员工具详解(转)
- 下一篇: xftp个人版下载