On Jan 29, 2012, at 11:32 PM, Seth Willits wrote: > This is such a dead simple problem that I think I've encountered a couple > times over the years and I don't think I've managed to ever find a solution > that works how I want. I'll break this down into an easy specific example. > > > Say I have a file type popup in a save sheet for saving an image: > > > @property NSString * fileType; > > > - (NSArray *)fileTypes > { > return [NSArray arrayWithObjects:(id)kUTTypeJPEG, (id)kUTTypePNG, > (id)kUTTypeTIFF, nil]; > } > > > - (NSArray *)fileTypeNames > { > return [NSArray arrayWithObjects:@"JPEG", @"PNG", @"TIFF", nil]; > } > > > > > The popup should display the names, but I want the selected item bound to > fileType which is one of the UTIs. By my reading of the documentation, this > _should be very simple_. > > Bind: > content -> fileTypes* > contentValues -> fileTypeNames > selectedObject -> fileType > > > So content provides the list of objects, contentValues provides the > corresponding titles for each object, selectedObject determines which object > is selected. Sounds simple, never works. I've never been able to figure it > out. It seems that if contents provides an array of *strings*, those strings > are use as the titles *no matter what*.
NSPopupButton is a strange animal, and this situation is probably not the only undocumented behavior. For instance, when using selectedObject, the returned object must be an exact object in the content/contentObjects array. -isEqual is not enough. I suspect that NSPopupButton requires that the contentValue always be a path on the content object. If you change your code to: - (NSArray *)fileTypes { return [NSArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys:(id)kUTTypeJPEG, @"uti", @"JPEG", @"name", nil], [NSDictionary dictionaryWithObjectsAndKeys:(id)kUTTypePNG, @"uti", @"PNG", @"name", nil], [NSDictionary dictionaryWithObjectsAndKeys:(id)kUTTypeTIFF, @"uti", @"TIFF", @"name", nil], nil]; } Bind: content -> fileTypes contentObjects -> fileTypes.uti contentValues -> fileTypes.name selectedObject -> fileType You will notice that it works. Note that you may also be able to use an NSDictionaryController to simplify the code. HTH, Keary Suska Esoteritech, Inc. "Demystifying technology for your home or business" _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com