0

我正在尝试在 Xcode 中进行一些编码,并且在选择器方面遇到了一些问题。我创建了一个NSButton名为的子类modifiedNSButton。构造函数之一是

+ (id)CreateButtonViewUsingObject:(id)targetObject  selector:(SEL)select caption:(NSString *)label;

但是,我能够让它工作的唯一方法是传递选择器,因为@selector(bleep:) 它工作但我得到了消息

不兼容的指针类型将“NSString *”发送到“SEL”类型的参数

我认为这意味着它@selector(bleep:)是作为NSString而不是发送的SEL。但是,它似乎有效,我不知道我是否做错了什么。我会将我的代码发布到我的 Git 以供人们查看,然后提供指向该位置的指针。

4

1 回答 1

0

首先,您确实应该遵循 Objective C 中的命名约定:

  • 你的 Class 应该被命名ModifiedNSButton,以一个大字母开头
  • 相反,函数应该以小写字母开头

然后,“构造函数”也应该遵循一些约定:

  • 返回类型应该是instancetype,而不是id
  • 如果它是初始化程序,请以init...(like initUsingObject...)开头
  • 如果是类工厂,则以类名启动函数。

在你的情况下,你应该命名它 + (instancetype) modifiedNSButtonUsingObject:(id)targetObject selector:(SEL)select caption:(NSString*)label

说了这么多,我看不出你的代码有问题:

@interface ModifiedNSButton : NSButton

@end

@implementation ModifiedNSButton

+ (instancetype)modifiedNSButtonUsingObject:(id)targetObject selector:(SEL)select caption:(NSString *)label {
    return [self new];
}

- (void) handler {
}

- (void) handlerWithName:(NSString*)name andValue:(NSInteger)value {
}

- (void) test {
    NSButton *b1 = [ModifiedNSButton modifiedNSButtonUsingObject:self selector:@selector(handler) caption:@"One"];
    NSButton *b2 = [ModifiedNSButton modifiedNSButtonUsingObject:self selector:@selector(handlerWithName:andValue:) caption:@"Two"];
}
@end

我没有看到任何“不兼容的指针类型”警告。

于 2021-02-14T20:20:41.363 回答