注:本文來自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í)例效果
