Cocoa提供了多个内部机制:Key-Value Coding(KVC)、Key-Value Observing(KVO)、Key-Value Binding(KVB)。KVC与KVO在iOS中我们经常用到,再熟悉不过了,本文主要带你了解下KVB(Key Value Binding)机制。
KVC(Key Value Coding)
KVC(Key Value Coding),即是指 NSKeyValueCoding,一个非正式的协议,提供一种机制来间接访问对象的属性。而不是直接调用Getter、Setter、访问器方法访问。因此一个对象的所有属性都可以使用这种方式访问。
KVO(Key Value Observing)
KVO(Key Value Observing),即是指NSKeyValueObserving ,一个非正式的协议,建立在 KVC 之上,提供一种机制允许对象去监听其它对象的某个属性的修改。
KVB(Key Value Binding)
KVB(Key Value Binding),即是指NSKeyValueBindingCreation ,属于Cocoa AppKit.framework ,一个非正式协议,提供了方法来创建和删除视图对象和控制器或控制器和模型之间的绑定对象。此外,它也提供了视图子类来宣传公开的绑定的方法。这种非正式协议由NSObject实现 ,方法可以被视图和控制器子类覆盖。
概述
当创建一个涉及接收器绑定到指定 key path的可观测对象的属性绑定(例如,视图对象的属性)。当可观察对象的指定属性的值发生更改时,接收方通过键-值观测机制被通知。绑定可以进一步指定自定义的绑定选项(如何观察和被观察的对象进行交互)。
绑定被认为是一个对象的属性绑定。所有绑定的相关信息应该被对象拥有。所有标准绑定使用在AppKit对象上(views, cells, table columns, controllers) ,当他们销毁时自动解绑定。但是如果你对其他类型的对象创建键值绑定,你需要确保回收之前删除这些绑定(被观察对象持有观察者的弱引用,所以controllers/model对象可能继续引用和发送消息给绑定到他们的对象)
绑定对象之间通常使用在Interface Builder中建立的绑定检查员(Bindings inspector)。然而,有时必须以编程方式完成,例如当在不同的nib文件对象之间建立一个绑定。
NSView子类可以通过调用类方法exposeBinding:为每个属性公开额外的key-value-coding/key-value-observing兼容属性作为绑定。这通常是在类的初始化方法完成的。通过公开对象支持的绑定和创建一个 Interface Builder palette,你可以使你自己的类的实例绑定在Interface Builder。
暴露绑定
+ (void)exposeBinding:(NSString *)binding;
暴露指定的绑定,广告其可用性。
@property(readonly, copy) NSArray<NSString *> *exposedBindings;
返回一个数组,其中包含接收器公开的绑定。
一个子类可以重写此方法删除一个不适合子类,超类所暴露的绑定
管理绑定
- (Class)valueClassForBinding:(NSString *)binding;
返回指定的绑定的类。
该方法被 Interface Builder使用来确定适当的绑定转化。该方法的实现是可选的。
- (void)bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary<NSString *,id> *)options;
在给定接受者的属性和给定指定了key path的对象建议一个绑定
binding:之前使用exposeBinding:方法暴露的接收者的一个属性对应的key path。
observableController : 绑定到的对象
keyPath :一个observableController的属性 key path。path中的元素key-value observing兼容(见 Key-Value Observing Programming Guide)。
options:包含绑定选项的字典,比如占位对象或NSValueTransformer标识符作为常量。这个值是可选的,nil为没有任何选项。
- (NSArray<NSAttributeDescription *> *)optionDescriptionsForBinding:(NSString *)binding;
返回一个数组描述指定的绑定选项。
binding:绑定的名称
- (NSDictionary<NSString *,id> *)infoForBinding:(NSString *)binding;
返回一个字典描述接收者的绑定。
binding:绑定的名称
返回值
字典描述绑定的信息,如果绑定不被捆绑返回nil。字典包含三个键/值对:NSObservedObjectKey:对象绑定,NSObservedKeyPathKey:关键路径绑定,NSOptionsKey:绑定的字典的选项和它们的值。
讨论
这个方法主要是由子类使用用来分析现有对象的绑定。
- (void)unbind:(NSString *)binding;
删除接收器和控制器之间给定的绑定。
binding:绑定的名称
常量
绑定选项
以下值作为键的选项字典传递到bind:toObject:withKeyPath:options:方法。这些键也被作为infoForBinding:返回值NSOptionsKey。有关更多信息,请参Cocoa Bindings Reference
NSAllowsEditingMultipleValuesSelectionBindingOption
NSAlwaysPresentsApplicationModalAlertsBindingOption
NSAllowsNullArgumentBindingOption
NSConditionallySetsEditableBindingOption
NSConditionallySetsEnabledBindingOption
NSConditionallySetsHiddenBindingOption
NSContentPlacementTagBindingOption
NSContinuouslyUpdatesValueBindingOption
NSCreatesSortDescriptorBindingOption
NSDeletesObjectsOnRemoveBindingsOption
NSDisplayNameBindingOption
NSDisplayPatternBindingOption
NSHandlesContentAsCompoundValueBindingOption
NSInsertsNullPlaceholderBindingOption
NSInvokesSeparatelyWithArrayObjectsBindingOption
NSMultipleValuesPlaceholderBindingOption
NSNoSelectionPlaceholderBindingOption
NSNotApplicablePlaceholderBindingOption
NSNullPlaceholderBindingOption
NSPredicateFormatBindingOption
NSRaisesForNotApplicableKeysBindingOption
NSSelectorNameBindingOption
NSSelectsAllWhenSettingContentBindingOption
NSValidatesImmediatelyBindingOption
NSValueTransformerNameBindingOption
NSValueTransformerBindingOption
绑定字典键
以下值作为infoForBinding:返回的字典的键:
NSObservedObjectKey 可观测的控制器绑定的对象。
NSObservedKeyPathKey 绑定包含的key path 。
NSOptionsKey 当绑定被创建时候,选项中包含键值对的字典
绑定
以下值用于指定一个绑定给bind:toObject:withKeyPath:options:, infoForBinding:, unbind: and valueClassForBinding:。有关更多信息,请参见可可绑定引用。
NSAlignmentBinding
NSAlternateImageBinding
NSAlternateTitleBinding
NSAnimateBinding
NSAnimationDelayBinding
NSArgumentBinding
NSAttributedStringBinding
NSContentArrayBinding
NSContentArrayForMultipleSelectionBinding
NSContentBinding
NSContentDictionaryBinding
NSContentHeightBinding
NSContentObjectBinding
NSContentObjectsBinding
NSContentSetBinding
NSContentValuesBinding
NSContentWidthBinding
NSCriticalValueBinding
NSDataBinding
NSDisplayPatternTitleBinding
NSDisplayPatternValueBinding
NSDocumentEditedBinding
NSDoubleClickArgumentBinding
NSDoubleClickTargetBinding
NSEditableBinding
NSEnabledBinding
NSExcludedKeysBinding
NSFilterPredicateBinding
NSFontBinding
NSFontBoldBinding
NSFontFamilyNameBinding
NSFontItalicBinding
NSFontNameBinding
NSFontSizeBinding
NSHeaderTitleBinding
NSHiddenBinding
NSImageBinding
NSIncludedKeysBinding
NSInitialKeyBinding
NSInitialValueBinding
NSIsIndeterminateBinding
NSLabelBinding
NSLocalizedKeyDictionaryBinding
NSManagedObjectContextBinding
NSMaximumRecentsBinding
NSMaxValueBinding
NSMaxWidthBinding
NSMinValueBinding
NSMinWidthBinding
NSMixedStateImageBinding
NSOffStateImageBinding
NSOnStateImageBinding
NSPositioningRectBinding
NSPredicateBinding
NSRecentSearchesBinding
NSRepresentedFilenameBinding
NSRowHeightBinding
NSSelectedIdentifierBinding
NSSelectedIndexBinding
NSSelectedLabelBinding
NSSelectedObjectBinding
NSSelectedObjectsBinding
NSSelectedTagBinding
NSSelectedValueBinding
NSSelectedValuesBinding
NSSelectionIndexesBinding
NSSelectionIndexPathsBinding
NSSortDescriptorsBinding
NSTargetBinding
NSTextColorBinding
NSTitleBinding
NSToolTipBinding
NSTransparentBinding
NSValueBinding
NSValuePathBinding
NSValueURLBinding
NSVisibleBinding
NSWarningValueBinding
NSWidthBinding
查阅Cocoa Bindings Reference获取更多信息
转载请注明:天狐博客 » Cocoa开发之KVB(Key Value Binding)