Oznaczyłeś to znacznikiem kakao, więc zakładam, że masz na myśli "z wiązaniami". Wziąłem szybki przykład. Rozpocznij od nowego, nie opartego na dokumencie, szablonu aplikacji kakao w Xcode. Nazwij to, co chcesz. Najpierw dodałem trochę kodu, aby sfałszować dane, z którymi się wiąże. Oto co mój nagłówek AppDelegate wygląda następująco:
#import <Cocoa/Cocoa.h>
@interface SOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (retain) id dataModel;
@end
A oto co moja realizacja AppDelegate wygląda następująco:
#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
Nie ma szczególne znaczenie dla fałszywej struktury danych stworzyłem, po prostu chciał pokazać coś z kilka podpoziomów itp. Jedyne, co ma znaczenie, to że ścieżki kluczy określone w powiązaniach w Konstruktorze interfejsów są zgodne z kluczami w danych (w tym przypadku fałszywe dane).
Następnie wybierz MainMenu.xib
fil mi. W edytorze IB, wykonaj następujące kroki:
- użyć obiektu Biblioteka (Ctrl-Cmd-Opt-3), aby dodać NSTreeController do
.xib
.
- Wybierz NSTreeController, a za pomocą Inspektora właściwości (Cmd-Opt-4) ustawić Kluczowe Ścieżki> Dzieci do
children
(w tym przykładzie, dla danych, powinno to być cokolwiek zwraca tablicę obiektów podrzędnych.)
- przy NSTreeController nadal zaznaczona, należy użyć wiązania Inspector (CMD-Opt-7) w celu związania zawartość Array do AppDelegate z modelu Key ścieżce
dataModel
- Następny użyć Object Library (Ctrl-Cmd- Opt-3), aby dodać widok NSOutlineView do twojego
.xib
.
- Ułóż według własnego uznania w oknie (zazwyczaj na całej wysokości okna, równo z lewą stroną).
- Wybierz NSOutlineView (pamiętaj, że po pierwszym kliknięciu, prawdopodobnie wybrałeś NSScrollView, który go zawiera, kliknij go po raz drugi, a przejdziesz do samego widoku NSOutlineView. Zauważ, że jest to DUŻY łatwiejsze, jeśli poszerzysz obszar po lewej stronie edytora IB, gdzie znajdują się wszystkie obiekty - - pozwala to zobaczyć obiekty jako drzewa, nawigować i wybierać je w ten sposób.)
- użyciu atrybutów Inspector (Cmd aktywacyjne 4) ustalają NSOutlineView:
- tryb zawartość:
View Based
- kolumny:
1
- Highlight:
Source List
- Korzystanie z Inspektora powiązań (Cmd-Opt-7) powiązanie "Co ntent "to" Tree Controller ", klucz kontrolera: arrangedObjects (To jest, gdzie zachowanie opartych na widoku NSTableView/NSOutlineViews zaczyna odbiegać od tych opartych na NSCell)
- Na liście obiektów (wymienionych w punkcie 6) rozwiń zobacz hierarchię widoku NSOutlineView i wybierz
Static Text - Table View Cell
.
- Używanie Wiązania Inspector (CMD-Opt-7) wiążą Wartość do
Table Cell View
, model Key Ścieżka: objectValue.itemName
(Użyłem itemName
w fałszywych danych, to będzie chciał wykorzystać dowolny klawisz odzwierciedlał nazwę swojego elementy danych)
Zapisz. Biegać. Powinieneś zobaczyć listę źródeł, a po Rozszerzyliśmy węzły z dziećmi, można zobaczyć coś takiego:
Jeśli jesteś w programie firmy Apple Developer, należy mieć dostęp do WWDC 2011 Videos. Jest jeden specjalnie dedykowany do pracy z NSTableView opartym na widoku (i NSOutlineView) i obejmuje on dość dokładne pokrycie powiązań.
Nadzieję, że pomaga!
FYI w 2011 roku wideo WWDC jest sesja zatytułowana 120 Zobacz Based NSTableView. – jemeshsu
Dla tych, którzy używają tego: również rozważyć: http://stackoverflowflow.com/questions/7095703/binding-view- based-nsoutlineview-to-core-data – bijan
Czy ten sposób może działać również w Leopard i Snow Leopard? – arufian