注:本文来自Core Data by tutorials 2.0 , swift + iOS 9 .本文非翻译 只讲大体思路
建议先看第一章循序渐进 第一章
资料在这里 链接: http://pan.baidu.com/s/1o6Rfq58 密码: qymu
第二章的start项目,项目中界面已经画好了
第一章中 我们用KVC的特性对NSManagedObject进行存取
这章我们将使用面向对象的思路
一 、创建Entity
不解释了 在这里 创建一个领结的Entity,这里的属性是对应SampleData.plist
中的 ,大家可以打开这个文件看下
- 基础类型没啥说的,重点说下imageName图片资源对象的图片存在- Asssets中,类型是
Binary Data
对应的NSData类型 ,在项目中转化后存储
Binary Data
是可以外部存储的,如图可以勾选这个选项 , 在coredata中只存一个导向外部文件的uri
- tintColor 在
SampleData.plist
中存的是字典 rgb三个值 ,Transformable
表示可转化的 ,可以转化成你想要的值 。特殊类型都选择这个
二 、创建NSManagedObject的子类Bowtie
上章节使用KVC存取不仅不方便,而且容易出错。写错一个字母就悲剧了
//Set the name
person.setValue(name1, forKey: "name")
//Get the name
let name = person.valueForKey("name")
这次我们创建对应的对象 ,用面向对象的思维
首先 创建Bowtie类,
菜单栏 Editor->Create NSManagedObject Subclass….
起名字位Bowtie ,记得语言选择Swift
完了会生成两个文件
下面那个是空的 上面那个有很多属性,这些是
@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?
上面文件是下面的一个扩展extension
为啥这么做呢,面向对象思想,封装 分离等 属性和方法分开放
我们的我们的类型也被转了,这里有个对照映射表
• String -> String
• Integer 16/32/64, Float, Double and Boolean -> NSNumber
• Decimal -> NSDecimalNumber
• Date -> NSDate
• Binary data -> NSData
• Transformable -> AnyObject
如果你不想这么转 就想用原来的基础类型,创建的时候勾选个选项就可以了
到这里 我们子类已经创建好了
第三步 存取
//保存
let bowtie = NSEntityDescription.insertNewObjectForEntityForName("Bowtie", inManagedObjectContext: self.managedObjectContext) as! Bowtie
bowtie.name = "我的领结"
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)")
}
现在的存取就变的更简单的 而且也不用使用kvc 直接面向对象了
后面就是利用这些东西 就构建这个小应用,大家直接看complete的源码,有啥不懂的可以评论区交流
下面这句话应该是查询条件,根据searchKey 去查
request.predicate = NSPredicate(format:"searchKey == %@", selectedValue!)
其他也没啥好说的。后面章节暂时还没看 等我看了 再来总结
实例效果