请帮忙,这让我发疯:(
我有一个表单作为我正在编写的 OSX Cocoa 应用程序的一部分,它使用 NSPopUpButton 来选择您正在创建/编辑的记录类型。
我正在使用绑定将弹出按钮绑定到数组控制器,并且我选择的值绑定到 NSString。
我可以填充弹出窗口,可以选择一个项目并保存记录,但有两件事我做错了:
1) 选定的值对象包含项目的文本名称而不是其键 - 我已设置内容对象绑定
2)我无法在重新加载表单时恢复弹出窗口的选定项目。
以下是一些可提供帮助的代码示例:
@实现片段:
IBOutlet NSPopUpButton *popMediaType;
IBOutlet NSArrayController *acMediaTypes;
@property (nonatomic, copy) NSString *selMediaType;
@interface 片段:
- (void)setupForm {
NSArray *types = [[NSArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"Video", @"name", @"video", @"value", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Advert", @"name", @"advert", @"value", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Graphic", @"name", @"graphic", @"value", nil],
nil];
[acMediaTypes setContent:types];
}
在界面生成器中:
acMediaTypes 是名为 mediaTypes 的数组控制器对象的引用出口 popMediaType 是表单上 NSPopUpButton 的引用出口
我的 NSPopUpButton 的绑定是这样配置的:
Content (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: <null>
Content Objects (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: value
Content Values (mediaTypes.arrangedObjects)
Bind to: mediaTypes
Controller Key: arrangedObjects
Model Key Path: name
Selected Value (File's Owner.selMediaType)
Bind to: Files Owner
Controller key: <null>
Model Key Path: selMediaType
弹出窗口正确显示,正确显示数组“名称”部分的文本。
如果我使用 NSLog() 之类的代码读取selMediaType
我的代码,那么我会看到“视频”,例如,如果选择了该项目 - 它应该是“视频”(字典中“值”部分的小写字母)
我可以毫无问题地将值存储在我的 sqlite 数据库中,并使用终端中的 sqlite3 检查它们并保存所有内容。
如果我从表中加载值,我会认为只是设置selMediatype
会重置 NSPopUpButton 中的项目位置,但事实并非如此。