NSEntityDescription和NSManagedObject

1.NSEntityDescription和NSManagedObject

在CoreData中Model定义了数据存储的schema,包含一组data models,每一个data model对应一个NSEntityDescription对象,NSEntityDescription对象包含了Entity所拥有的属性,关系等信息,我们可以通过NSEntityDescription生成相应的NSManagedObject的实体,

[c-sharp]  view plain copy
  1. NSManagedObject *newObject=[NSEntityDescription   
  2.                insertNewObjectForEntityForName:@"ModelName"   
  3.                     inManagedObjectContext:[self managedObjectContext]];  
 

这个时候newObject便是一个类型为ModelName的实体对象了。我们可以给对象通过kvc的接口添加属性值。
当然我们也可以写NSManagedObject的子类,然后声明属性,再通过@dynamic指令使得我们可以通过点运算符来设置属性值。

 

2.KVC

 

KVC即Key Value Coding的缩写,如果你使用过其他语言,你应该对Key-Value的结构比较了解的,如Java中的HashMap,python中的Dictionary,js中的json,这些内容都涉及到kv的知识。
在Objc里,NSKeyValueCoding协议定义了kvc的相关内容,这个包含在NSKeyValueCoding.h头文件中,NSObject实现了此协议。那KVC到底是什么样的呢?
我们都知道我们定义一个类,类有属性,然后我们可以通过accessor来获取属性或者设置属性的值,
比如一个老式的属性获取和设值方式:

[c-sharp]  view plain copy
  1. [person name]  
  2. [person setName:@"Luke"]  
 

当我们使用kvc的方式的话,可以写成:

[c-sharp]  view plain copy
  1. [person valueForKey:@"name"]  
  2. [person setValue:@"Luke"  
  3. forKey:@"name"]  
 

所以说从某种意义上说,kvc使得每一个对象都可以看成一个dictionary对象。
当通过kvc方式设置属性值的时候,会发送值被修改的通知,我们可以在别的地方捕获到这个通知,以便别的地方做相应的更新。Cocoa中的Binding便是这个原理,不过Cocoa中的很多控件通过绑定帮你省去了很多胶水代码。
Binding在MVC的程序中显得尤为有用,M到V之间的绑定,并通过C来控制协调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值