これはcocoa-bindingsタグでタグ付けされています。だから、あなたは「バインディングあり」を意味すると思います。私は簡単な例を書いた。 Xcodeの新しいドキュメントベースのCocoaアプリケーションテンプレートから始めましょう。あなたの好きなものを呼んでください。まず、偽のデータをバインドするコードをいくつか追加しました。ここに私AppDelegateヘッダーは次のようになります。
#import <Cocoa/Cocoa.h>
@interface SOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (retain) id dataModel;
@end
そして、ここでは次のように私AppDelegateの実装が見えるものです:私が作成した偽のデータ構造には特に意味はありません
#import "SOAppDelegate.h"
@implementation SOAppDelegate
@synthesize window = _window;
@synthesize dataModel = _dataModel;
- (void)dealloc
{
[_dataModel release];
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
// Make some fake data for our source list.
NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 3", @"itemName", [NSMutableArray array], @"children", nil];
[[item2_2 objectForKey: @"children"] addObject: item2_2_1];
[[item2_2 objectForKey: @"children"] addObject: item2_2_2];
[[item2 objectForKey: @"children"] addObject: item2_1];
[[item2 objectForKey: @"children"] addObject: item2_2];
NSMutableArray* dataModel = [NSMutableArray array];
[dataModel addObject: item1];
[dataModel addObject: item2];
[dataModel addObject: item3];
self.dataModel = dataModel;
}
@end
、私はただで何かを見せたかったですいくつかのサブレベルなどがあります。重要な点は、Interface Builderのバインディングで指定したキーパスがデータのキーと一致することです(この場合は偽データ)。
MainMenu.xib
fil e。 IBエディタでは、次の手順を実行します。
- あなた
.xib
にNSTreeControllerを追加するオブジェクトをライブラリます(Ctrl-CMD-OPT-3)を使用します。
- NSTreeControllerを選択し、属性インスペクター(CMD-OPT-4)を使用すると、キーのパスを設定>子供
children
に(この例では、あなたのデータの場合、これは、子オブジェクトの配列を返すものは何でもする必要があります。) まだ選択NSTreeController、オブジェクトライブラリ(Ctrlキーを押しながらCmd-を使用
dataModel
- 次のモデルキーパスで、AppDelegateにコンテンツ配列をバインドするバインディングインスペクタ(CMD-OPT-7)を使用して
- Opt-3)を使用して
.xib
にNSOutlineViewを追加します。
- ウィンドウ内で満足できるように配置します(通常、ウィンドウの高さ全体を左側に置きます)
- NSOutlineViewを選択します(最初にクリックすると、それを含んでいるNSScrollView。それをもう一度クリックすると、NSOutlineView自体がドリルダウンされます。すべてのオブジェクトがあるIBエディタの左側の領域を広げると、これはMUCHになります。これにより、オブジェクトをツリーとして表示し、そのようにナビゲートして選択することができます。
- コンテンツモード:
View Based
- 列:
1
- ハイライト:
Source List
属性インスペクタ(CMD-OPT-4)を使用して)
- はNSOutlineViewセット
- バインディングインスペクタ(Cmd-Opt-7)を使用すると、 "Co ntent "から" Tree Controller "、コントローラキー:arrangedObjects(これは、ViewベースのNSTableView/NSOutlineViewsの動作がNSCellベースのものとはじまります)
- オブジェクトリスト(#6で説明)で、 NSOutlineViewのビュー階層を開き、
Static Text - Table View Cell
を選択します。バインディングインスペクタ(CMD-OPT-7)を使用して
- は、
Table Cell View
に値モデルキーパスををバインド:objectValue.itemName
(私は偽のデータでitemName
を使用しました、あなたはあなたの名前に対応した方のキーを使用したいと思いますデータ項目)
保存します。実行します。あなたは、ソースのリストが表示されます、そしてあなたは子供を持つノードを展開したら、このようなものが表示される場合があります
あなたはアップルデベロッパプログラムにしている場合は、あなたがアクセスすることができるはずですWWDC 2011 Videos。 ViewベースのNSTableView(およびNSOutlineView)での作業に特化したものがあり、これにはかなり完全なバインディングが含まれています。
希望に役立ちます!
FYI WWDC 2011のビデオを見るに基づくNSTableViewと題したセッション120です。 – jemeshsu
これを使用する人は、次の点も考慮してください。http://stackoverflow.com/questions/7095703/binding-view-based-nsoutlineview-to-core-data – bijan
この方法はLeopardとSnow Leopardでも実行できますか? – arufian