itok's Lab

昔の開発ネタを記録として残してます

動的なbinding

プログラム上で Cocoa binding を行うには bind:toObject:withKeyPath:options: を使います。こんな感じで。

// binding のオプション
// (NSValueTransformer の指定とか、初期値の指定とかいろいろ)
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
    NSNegateBooleanTransformerName, NSValueTransformerNameBindingOption,
    nil];

// binding 実施
[obj bind:@"value"      // binding するプロパティ (enable とか selectedIndex とか)
    toObject:observer   // binding 先 (NSController とか)
    withKeyPath:@"flag" // keypath 名
    options:options];   // オプション

ちなみに binding の解除には unbind: の引数にプロパティをわたせばOK。