Hai taggato questo con il tag cacao-binding, quindi presumo tu intenda "con binding". Ho fatto un rapido esempio. Inizia da un nuovo modello di applicazione Cocoa non basato su documenti in Xcode. Chiamalo come vuoi Per prima cosa ho aggiunto del codice per creare dei dati falsi su cui legare. Ecco ciò che il mio colpo di testa AppDelegate assomiglia:
#import <Cocoa/Cocoa.h>
@interface SOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (retain) id dataModel;
@end
Ed ecco quello che la mia realizzazione AppDelegate assomiglia:
#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
Non c'è particolare importanza per la struttura di dati falsi che ho creato, ho solo voluto mostrare qualcosa con un paio di sottolivelli, ecc. L'unica cosa che conta è che i percorsi chiave specificati nei collegamenti di Interface Builder coincidano con le chiavi nei dati (dati falsi in questo caso)
Quindi selezionare il MainMenu.xib
fil e. Nel l'editor IB, effettuare le seguenti operazioni:
- utilizzare l'oggetto Library (Ctrl-Cmd-Opt-3) per aggiungere un NSTreeController al vostro
.xib
.
- Selezionare il NSTreeController, e utilizzando Impostazioni Attributi (Cmd-Opt-4) impostare chiave Percorsi> I bambini-
children
(per questo esempio, per i dati, questo dovrebbe essere quello restituisce l'array di oggetti figlio.)
- con la NSTreeController ancora selezionato, utilizzare l'ispettore Associazioni (Cmd-Opt-7) di impegnare la Content Array al AppDelegate, con un modello Percorso chiave di
dataModel
- Avanti utilizzare la libreria di oggetti (Ctrl-Comando + Opt-3) per aggiungere un NSOutlineView al tuo
.xib
.
- Disporre in modo soddisfacente all'interno della finestra (in genere l'intera altezza della finestra, a filo contro il lato sinistro)
- Selezionare NSOutlineView (notare che la prima volta che si fa clic su di esso, è probabile che sia stata selezionata la NSScrollView che lo contiene Fai clic su di esso una seconda volta e avrai eseguito il drill-down su NSOutlineView. Nota che questo è MUCH più facile se si allarga l'area a sinistra dell'editor IB in cui si trovano tutti gli oggetti - - questo ti permette di vedere gli oggetti come un albero, e navigare e selezionarli in questo modo.)
- utilizzando Impostazioni attributi (Cmd-Opt-4) impostare il NSOutlineView:
- Modalità contenuto:
View Based
- Colonne:
1
- Highlight:
Source List
- Utilizzando l'ispettore binding (Cmd-Opt-7) associare "Co ntent "a" Tree Controller ", Controller Key: arrangedObjects (Questo è il punto in cui il comportamento di NSTableView/NSOutlineViews basato su View inizia a divergere da quelli basati su NSCell)
- Nell'Elenco Oggetti (menzionato in # 6), espandi il visualizzare la gerarchia di NSOutlineView e selezionare
Static Text - Table View Cell
.
- utilizzando Impostazioni Associazioni (Cmd-Opt-7) si legano Valore-
Table Cell View
, Modello Percorso chiave: objectValue.itemName
(ho usato itemName
nei dati falsi, si vorrebbe utilizzare qualsiasi chiave corrisponde al nome del tuo dati)
Salva. Correre. Si dovrebbe vedere un elenco di origine, e una volta espanso i nodi con i bambini, si potrebbe vedere qualcosa di simile:

Se siete nel programma Apple Developer, si dovrebbe essere in grado di accedere il WWDC 2011 Videos. Ce n'è uno specificamente dedicato a lavorare con ViewView NSTableView (e NSOutlineView) e include una copertura piuttosto approfondita dei binding.
Spero che questo aiuti!
FYI del 2011 il video WWDC è seduta 120 intitolato visualizzazione basata NSTableView. – jemeshsu
Per chi lo usa: considera anche: http://stackoverflow.com/questions/7095703/binding-view-based-nsoutlineview-to-core-data – bijan
In questo modo è possibile eseguire anche in Leopard e Snow Leopard? – arufian