第二章 自定義NSManagedObject(NSManagedObject子類)

注:本文來自Core Data by tutorials 2.0 , swift + iOS 9 .本文非翻譯 只講大體思路

配圖

建議先看第一章循序漸進(jìn) 第一章

資料在這里 鏈接: http://pan.baidu.com/s/1o6Rfq58 密碼: qymu
第二章的start項(xiàng)目,項(xiàng)目中界面已經(jīng)畫好了

第一章中 我們用KVC的特性對(duì)NSManagedObject進(jìn)行存取

這章我們將使用面向?qū)ο蟮乃悸?/p>

配圖
一 、創(chuàng)建Entity

不解釋了 在這里 創(chuàng)建一個(gè)領(lǐng)結(jié)的Entity,這里的屬性是對(duì)應(yīng)SampleData.plist中的 ,大家可以打開這個(gè)文件看下

  • 基礎(chǔ)類型沒啥說的,重點(diǎn)說下imageName圖片資源對(duì)象的圖片存在- Asssets中,類型是Binary Data 對(duì)應(yīng)的NSData類型 ,在項(xiàng)目中轉(zhuǎn)化后存儲(chǔ)

Binary Data是可以外部存儲(chǔ)的,如圖可以勾選這個(gè)選項(xiàng) , 在coredata中只存一個(gè)導(dǎo)向外部文件的uri

配圖
  • tintColor 在SampleData.plist中存的是字典 rgb三個(gè)值 , Transformable表示可轉(zhuǎn)化的 ,可以轉(zhuǎn)化成你想要的值 。特殊類型都選擇這個(gè)

二 、創(chuàng)建NSManagedObject的子類Bowtie

上章節(jié)使用KVC存取不僅不方便,而且容易出錯(cuò)。寫錯(cuò)一個(gè)字母就悲劇了

//Set the name
person.setValue(name1, forKey: "name")
//Get the name
let name = person.valueForKey("name")

這次我們創(chuàng)建對(duì)應(yīng)的對(duì)象 ,用面向?qū)ο蟮乃季S

首先 創(chuàng)建Bowtie類,

菜單欄 Editor->Create NSManagedObject Subclass….
起名字位Bowtie ,記得語言選擇Swift

完了會(huì)生成兩個(gè)文件

配圖

下面那個(gè)是空的 上面那個(gè)有很多屬性,這些是

    @NSManaged var isFavorite: NSNumber?
    @NSManaged var timesWorn: NSNumber?
    @NSManaged var lastWorn: NSDate?
    @NSManaged var rating: NSNumber?
    @NSManaged var searchKey: String?
    @NSManaged var name: String?
    @NSManaged var imageName: NSData?
    @NSManaged var tintColor: NSObject?

上面文件是下面的一個(gè)擴(kuò)展extension 為啥這么做呢,面向?qū)ο笏枷?,封裝 分離等 屬性和方法分開放

我們的我們的類型也被轉(zhuǎn)了,這里有個(gè)對(duì)照映射表

? String -> String
? Integer 16/32/64, Float, Double and Boolean -> NSNumber
? Decimal -> NSDecimalNumber
? Date -> NSDate
? Binary data -> NSData
? Transformable -> AnyObject

如果你不想這么轉(zhuǎn) 就想用原來的基礎(chǔ)類型,創(chuàng)建的時(shí)候勾選個(gè)選項(xiàng)就可以了

配圖

到這里 我們子類已經(jīng)創(chuàng)建好了

第三步 存取

 //保存
    let bowtie = NSEntityDescription.insertNewObjectForEntityForName("Bowtie", inManagedObjectContext: self.managedObjectContext) as! Bowtie
    bowtie.name = "我的領(lǐng)結(jié)"
    bowtie.lastWorn = NSDate()
    do{
        try managedObjectContext.save()
        
    }catch let err as NSError{
        print("\(err.localizedDescription)")
    }
    
    //獲取
    do{
        let request = NSFetchRequest(entityName: "Bowtie")
        let ties = try managedObjectContext.executeFetchRequest(request) as! [Bowtie]
        let sample:Bowtie = ties[0]
        print("name is \(sample.name) , lastWorn is \(sample.lastWorn) ")
    }catch let err as NSError{
        print("\(err.localizedDescription)")
    }

現(xiàn)在的存取就變的更簡單的 而且也不用使用kvc 直接面向?qū)ο罅?/p>

后面就是利用這些東西 就構(gòu)建這個(gè)小應(yīng)用,大家直接看complete的源碼,有啥不懂的可以評(píng)論區(qū)交流

下面這句話應(yīng)該是查詢條件,根據(jù)searchKey 去查

    request.predicate = NSPredicate(format:"searchKey == %@", selectedValue!) 

其他也沒啥好說的。后面章節(jié)暫時(shí)還沒看 等我看了 再來總結(jié)

實(shí)例效果

配圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評(píng)論 18 399
  • 1.Difference between shallow copy and deep copy? 淺復(fù)制和深復(fù)制的...
    用心在飛閱讀 1,070評(píng)論 0 9
  • iOS CoreData介紹和使用(以及一些注意事項(xiàng)) 最近花了一點(diǎn)時(shí)間整理了一下CoreData,對(duì)于經(jīng)常使用S...
    Pocket閱讀 23,183評(píng)論 34 92
  • 適讀對(duì)象: 需要入門Core Data的朋友; 像我一樣,尚未學(xué)過數(shù)據(jù)庫相關(guān)課程,不太懂怎么寫SQLite語句的朋...
    AntonyWong閱讀 5,639評(píng)論 8 21
  • 上下九的繁華,也讓大雨沖散了不少
    嗯廣州閱讀 154評(píng)論 0 1

友情鏈接更多精彩內(nèi)容