gpt4 book ai didi

objective-c - Cocoa Programming,设置委托(delegate)

转载 作者:太空狗 更新时间:2023-10-30 03:35:41 27 4
gpt4 key购买 nike

我正在从 iOS 转向 Cocoa,并试图应付我最初的几个程序。我认为添加 NSComboBox 会很简单以我的形式,那部分是。我添加了 <NSComboBoxDelegate, NSComboBoxDataSource>到我的界面、两个数据回调和通知程序:

@interface spcAppDelegate : NSObject <NSApplicationDelegate,
NSComboBoxDelegate, NSComboBoxDataSource>

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;

- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

@end

我控制将组合框拖到应用委托(delegate)(这是我的简单默认应用中的唯一类)并连接委托(delegate)和数据源,但这些事件都没有触发。我认为 app delegate 是正确的,但由于它没有触发,我还尝试了“文件所有者”和“应用程序”。我不认为那些会奏效,但他们没有。

NSComboBox 连接委托(delegate)/数据源的正确方法是什么?在 Cocoa 应用程序中?

谢谢!

最佳答案

如果您实际上已经在 spcAppDelegate.m 文件中实现了这些方法,您可能需要仔细检查是否为 检查了 Uses Data Source NSComboBox 在 Interface Builder 的 nib 文件中:

enter image description here

请注意,在我创建的快速测试项目中,它不是默认设置的。在未设置该复选框的情况下运行应该在启动应用程序时将以下内容记录到控制台:

NSComboBox[2236:403] *** -[NSComboBox setDataSource:] should not be called when
usesDataSource is set to NO
NSComboBox[2236:403] *** -[NSComboBoxCell setDataSource:] should not be called
when usesDataSource is set to NO

虽然NSComboBox Class Reference有点帮助,当我第一次学习时,我发现如果有一节课有配套的指南链接,那么这些指南对于理解一个人应该如何在实践中使用这门课更有帮助。如果您查看配套指南NSComboBox 类引用的顶部,您会看到Combo Box Programming Topics。 .

要设置使用数据源的组合框,您可以使用如下内容:

spcAppDelegate.h:

#import <Cocoa/Cocoa.h>

@interface spcAppDelegate : NSObject <NSApplicationDelegate,
NSComboBoxDelegate, NSComboBoxDataSource> {
IBOutlet NSWindow *window;
IBOutlet NSComboBox *comboBox;
NSMutableArray *comboBoxItems;
}

@property (assign) IBOutlet NSWindow *window;

@end

spcAppDelegate.m:

#import "spcAppDelegate.h"
@implementation spcAppDelegate
@synthesize window;
- (id)init {
if ((self = [super init])) {
comboBoxItems = [[NSMutableArray alloc] initWithArray:
[@"Cocoa Programming setting the delegate"
componentsSeparatedByString:@" "]];
}
return self;
}
- (void)dealloc {
[comboBoxItems release];
[super dealloc];
}
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
return [comboBoxItems count];
}
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {
if (aComboBox == comboBox) {
return [comboBoxItems objectAtIndex:index];
}
return nil;
}
- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
NSLog(@"[%@ %@] value == %@", NSStringFromClass([self class]),
NSStringFromSelector(_cmd), [comboBoxItems objectAtIndex:
[(NSComboBox *)[notification object] indexOfSelectedItem]]);

}
@end

示例项目:http://github.com/NSGod/NSComboBox .

关于objective-c - Cocoa Programming,设置委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com