2010-09-23 6 views
0

У меня проблемы с программой, которую я пытаюсь сделать в Objective-C.Ожидаемое выражение перед ')' токеном

У меня есть метод, который я , пробуя в моем MainViewController.m, который выглядит следующим образом.

- (void)updateLabels:(NSString *)text :(BOOL)isOn; 
{ 
[self setNameLabel:(text *); 
if (isOn) 
[self setOnLabel:(ON *); 
else 
    [self setOnLabel:(OFF *); 
} 

Моя цель должна быть очевидна из этого кода. Я, вероятно, делаю что-то ужасно неправильно, чтобы получить сообщение об ошибке Expected expression before ')' token.

Буду признателен за любую помощь!

ответ

3

Это больше похоже на то, что вы пытаетесь сделать, это назначить текст на этикетке, а затем переключить ли его ON или OFF

#define ON YES 
#define OFF NO 
    - (void)updateLabels:(NSString *)text isOn:(BOOL) 
     { 
     [self setNameLabel:text]; 
     if (isOn) 
     [self setOnLabel:ON]; 
     else 
      [self setOnLabel:OFF]; 
     } 
+0

еще есть точка с запятой в конце объявления метода, который поднимает ошибку. –

-1

Оно должно быть:

- (void)updateLabels:(NSString *)text status:(BOOL) isOn { 
    ... 

Вам нужно для удаления полуколонны после объявления метода. Второй и последующие параметры должны иметь как имя поля (статус), так и переменную, чтобы поместить значение в (isOn).

В объявлении интерфейса вы поменять открывающую скобку для запятой, как это:

- (void)updateLabels:(NSString *)text status:(BOOL) isOn; 

Тогда называя это будет выглядеть следующим образом:

[... updateLabels:@"My label text" status:YES]; 
+0

-1 Вам не нужно удалять точку с запятой (верьте или нет), и вы можете иметь голый двоеточие в селекторе. – JeremyP

+0

О, не знал этого. Каков эффект отхода от двоеточия и использования голых двоеточий в селекторах? Я предполагаю, что они будут классифицированы как менее желательная практика, учитывая, что я не видел ее в каких-либо примерах и книгах, на которые я смотрел :-) – drekka

+0

Clarkson: Вы правы, вы * должны * называть все параметры в селекторе, и вы редко увидите код, который этого не делает. – mipadi

2

несколько проблем здесь. Во-первых, вам не нужна эта точка с запятой. Во-вторых, вам не нужно передавать указатели на ON и OFF:

- (void)updateLabelsWithText:(NSString *)text AndOnState:(BOOL)isOn { 
    [self setNameLabel: text]; 
    if(isOn) 
     [self setOnLabel:@"ON"]; 
    else 
     [self setOnLabel:@"OFF"]; 
} 
+0

Эта лишняя точка с запятой фактически легальна, верьте или нет. – JeremyP

+0

Полезно знать, я думал, что это забросило ошибки –

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