第二章 自定义NSManagedObject(NSManagedObject子类)

注:本文来自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!) 

其他也没啥好说的。后面章节暂时还没看 等我看了 再来总结

实例效果

配图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容