预期标识符

时间:2015-09-16 09:51:07

标签: ios xcode uiview properties nsdictionary

请有人能告诉我为什么这段代码不起作用?我有一个字典,其中包含UIViews,里面的表与键相关联,这些键是相应按钮的名称(有很多)。所以我真正想做的是在相应的按钮点击上更改视图可见性。但问题是Xcode不接受表达式,我得到了预期的标识符错误。

- (IBAction)choosingButtonClicked:(id)sender {
    if ([sender currentTitle]) {
        [(UIView *)[self.selectionTables objectForKey:[sender currentTitle]]].hidden = ![(UIView *)[self.selectionTables objectForKey:[sender currentTitle]]].isHidden;
    }
}

2 个答案:

答案 0 :(得分:2)

首先,在充分尊重的情况下,我同意trojanfoe的意见。它没有工作,因为它写得不好。

现在,让我们尝试使用以下代码简化它:

- (IBAction)choosingButtonClicked:(id)sender {
    NSString *title = [sender currentTitle];

    if (title) {
        UIView *selectionView = (UIView *)self.selectionTables[title];
        selectionView.hidden = !selectionView.isHidden;
    }
}

答案 1 :(得分:2)

你的代码太复杂了,因为即便是作者也无法理解它。如果我们使用局部变量重新编写代码,它将如下所示:

- (IBAction)choosingButtonClicked:(id)sender
{
    NSString *title = [sender currentTitle];
    if (title)
    {
        UIView *tempView  = (UIView *)[self.selectionTables objectForKey:title];
        [tempView].hidden = ![tempView].isHidden;
    }
}

如果您现在检查代码,可以看到以下代码导致问题:

[tempView].hidden = ![tempView].isHidden;

更改您的方法,如:

- (IBAction)choosingButtonClicked:(id)sender
{
    NSString *title = [sender currentTitle];
    if (title)
    {
        UIView *tempView = (UIView *)[self.selectionTables objectForKey:title];
        tempView.hidden  = !(tempView.isHidden);
    }
}