標籤:ios8 swift coredata objected model 資料庫
這後面的部分痘子的視頻已經不講了,我自己看著英文書試著給大家講的,書名叫《Beginning IOS8 Programming with Swift》,感興趣的同學自己搜一下哈。上一話中我們講解了coredadta的用法,那麼如何把coredata用到我們的工程中麼,可以把上一話中的代碼粘貼到我們工程的AppDelegate中,基本這套代碼是通用的,注意有兩句要修改一下,一句是:
let modelURL = NSBundle.mainBundle().URLForResource("tableView", withExtension: "momd")!
還有一句是
et url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("tableView.sqlite")
我的工程名是tableView(原諒我LOW了一點),所以做了以上修改,其他不變,都是從我們建立的那個coredata工程中複製過來的,代碼複製完後記得加上:
import CoreData
這個是coredata的標頭檔,現在關於使用coredata的所有準備工作都做好了,我們開始建立我們需要的模型吧。我們之前已經介紹過了,
在產生的中,建立一個Rest實體跟我們工程中的Rest類對應起來,,直接點擊+增加就好了。
大家可能會奇怪為什麼image的類型是Binary Data,其實是因為按照之前的做法我們的圖片都放在APP中,所以我們使用圖片的時候在UIImage這個類中直接用圖片的名字就能找到,如果使用者從相機中匯入了新的照片的話,我們不能再用這個辦法,所以我們需要把圖片存到資料庫中,而使用Binary Data就是這個目的。接著我們需要把我們的Rest類變成一個被coredata管理的類,點開Rest類,作如下修改:
import Foundationimport CoreDataclass Rest:NSManagedObject { @NSManaged var name:String! @NSManaged var type:String! @NSManaged var location:String! @NSManaged var image:NSData! @NSManaged var isVisit:NSNumber! } 關鍵字@NSManaged的作用是與實體中對應的屬性通訊,Binary Data對應的類型是NSData,Core Data沒有布爾屬性,只能用0 和 1來區分。當你把類做了修改之後,那麼建立類和實體之間的映射吧。進行如下操作,輸入類名:
建立好之後因為我們之前寫的代碼有些地方並不適用於coredata,所以編譯器會報錯,現在來一一解決。首先你現在不能再用檔案名稱來載入圖片。圖片現在時data對象,之前的代碼如下:
cgImageView?.image = UIImage(named: newRest.image)
修改如下:
cgImageView?.image = UIImage(data: newRest.image)
第二個錯誤是isVisit屬性,這個屬性不再是布爾類型了,之前的代碼:
let here = rest!.isVisit ? "Yes,I'm here" : "No"
修改為:
let here = rest!.isVisit.boolValue ? "Yes" : "No"
我們需要擷取它的布爾值
第三個錯誤是我們現在不能使用之前的DataArray了,我們把它清空。現在我們的程式中已經沒有資料了,需要我們自己把資料添加到資料庫中。
swift語言IOS8開發戰記23 Core Data4