简单的@selector语法错误

时间:2011-04-16 00:51:31

标签: iphone objective-c

这似乎是最简单的问题......但我无法弄清楚这个片段在语法上是不正确的。

运行此:

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:appDelegate action:@selector(addImage:NO)];

返回:

Expected '(' before ')' token

我看了几百次,但我找不到它的错误。感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

NO指令中不能有@selector()

小心点。 UI操作选择器应具有方法签名:

- (void)myMethod:(id)sender;

而不是

- (void)myMethod:(BOOL)someBool;

您可能需要一个包装器方法:

- (void)doneAction:(id)sender;
{
    [appDelegate addAction:NO];
}

答案 1 :(得分:0)

@selector()无法接受默认值,将其更改为

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:appDelegate action:@selector(addImage:)];

编辑: 为了弄清楚,当你有 - (void)addImage:(BOOL)resize; 这被转换为“addImage:”作为“方法”名称(选择器),当你传递“addImage:NO”时,你告诉objc看 - (void)addImage:(BOOL)调整大小NO:(BOOL)点头; //仅供参考 以错误(无效)选择器结束,导致对所有超级对象的双回跟踪调用respondsToSelector(addImage:NO)然后抛出BAD_ACCESS。

P.S。自从我写完最后一行objc以来,已经有一年了。

编辑2: 您可以使用上面提到的包装器或UIBarButtonItem.tag属性

cancelButton.tag = 1; // 1 indicating addImage:NO

- (void) addImage:(id)sender {
    UIBarButtonItem *button = (UIBarButtonItem *)sender;
    if (button.tag == 1) {
        // your value is NO
    } else {
        // your value is YES
    }
}

但无论如何我都不会这样做。 :)