最新消息:iOS编程开发交流群(6906921) ,Mac.Cocoa开发交流群(7758675) 欢迎iOS/macOS开发编程爱好及学习者加入!

Cocoa开发之KVB(Key Value Binding)

Cocoa 天狐 6222浏览 0评论

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)

微信 OR 支付宝 扫描二维码
为天狐 打赏
非常感谢你的支持,哥会继续努力!
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址