You can get the currently selected item in the browser of an NSSavePanel or NSOpenPanel object by having the delegate of the panel object implement the panelSelectionDidChange: delegation method. The delegate then can perform some operation based on the userâÂÂs selection, such as displaying metadata about a chosen file in an accessory view, as illustrated in  Figure 1.
In its implementation of panelSelectionDidChange:, the delegate sends a message back to the NSOpenPanel or NSSavePanel object (sender) to get the current filename. For NSSavePanel, this message is filename; for NSOpenPanel, send filenames and then get the first item in the array.  Listing 1 shows how you might implement the method to display in the information in the accessory view in Figure 1.
Listing 1 Getting the selection in the panel browser
- (void)panelSelectionDidChange:(id)sender { | 
NSArray *curFiles = [sender filenames];  | 
    if ([curFiles count] == 1) { // ignore multiple selections | 
NSString *curPath = [curFiles objectAtIndex:0];  | 
        if (curPath != nil) { | 
NSDictionary *fAttrs = [[NSFileManager defaultManager] fileAttributesAtPath:curPath traverseLink:YES];  | 
            if (fAttrs != nil) { | 
[infoFile setStringValue: [curPath lastPathComponent]];  | 
[infoMod setStringValue: [[fAttrs objectForKey:NSFileModificationDate] descriptionWithCalendarFormat:@"%a, %b %d, %Y %H:%M:%S" timeZone:nil locale:nil]];  | 
[infoOwner setStringValue: [fAttrs objectForKey: NSFileOwnerAccountName]];  | 
[infoGroup setStringValue: [fAttrs objectForKey: NSFileGroupOwnerAccountName]];  | 
}  | 
}  | 
}  | 
}  | 
In this code example, the delegate uses the NSFileManager method fileAttributesAtPath:traverseLink: to fetch information about the currently selected file. It then sets the string value of various text fields in the accessory view.
© 2006 Apple Computer, Inc. All Rights Reserved. (Last updated: 2006-11-07)