2015-09-16 3 views
0

Пожалуйста, скажите мне, почему этот кусок кода не работает? У меня есть словарь, который содержит UIViews с таблицами внутри, связанными с ключами, которые являются именами соответствующих кнопок (их очень много). Так что я действительно хочу сделать, это изменить видимость вида на соответствующую кнопку. Но проблема в том, что выражение для этого не принимается Xcode, и я получаю ошибку ожидаемого идентификатора.Ожидаемый идентификатор

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

Это не работает, потому что это слишком сложно. Новые строки не стоят жизни. Сделайте код удобным для понимания и понимания. – trojanfoe

+3

'(UIView *) [self.selectionTables objectForKey: [sender currentTitle]]' => предположительно 'UIView'. Назовем это «myView». Если мы заменим его, вы делаете '[myView] .hidden'. Это явно порождает синтаксическую ошибку. – Larme

+0

Спасибо, ребята!)) – AOY

ответ

2

Прежде всего, при всем моем уважении, я согласен с комментариями трояна. Его не работает, потому что его неправильно написано.

Теперь давайте попробуем упорядочить ее ниже код:

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

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

Избегайте двойного литья 'UIView' и сделайте его локальной переменной. – trojanfoe

+0

Большое вам спасибо! – AOY

+1

@trojanfoe Спасибо за указание! Я исправил свой пост. – Abhinav

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); 
    } 
} 
+0

Это все равно даст ту же ошибку, но, по крайней мере, это понятно. – trojanfoe

+1

@trojanfoe: Я обновил свой ответ с помощью решения. Первая часть предназначена только для объяснения кода OP и ошибки –

Смежные вопросы