) ожидается раньше;токен в заявлении if - PullRequest
0 голосов
/ 14 июня 2011

Я определил константу в заголовочном файле

#define kPortraitMode 1
#define kLandscapeMode 2

Byte:viewOrientation;//this is my ivar that'll keep interface orientation info

В willAutorotateToInterfaceOrientation: withDuration: метод, я говорю:

if(toInterfaceOrientation==UIInterfaceOrientationPortrait){
   self.viewOrientation=kPortraitMode;
}
else{
    self.viewOrientation=kLandscapeMode;        

Затем в табличном представлении Метод источника данных tableview: height: forIndexPath метод Я говорю:

double height;
if (self.viewOrientation==kPortraitMode){//Here I get the error) expected before token;

height=263.0;
}
else{
height=320;
}
return height;

Мой вопрос, что я делаю не так, чтобы получить эту ошибку компилятора?Это просто простое выражение.

Ответы [ 3 ]

6 голосов
/ 14 июня 2011

Вы уверены, что заданная константа выглядит так

#define kPortraitMode 1
#define kLandscapeMode 2

А не так:

#define kPortraitMode 1;
#define kLandscapeMode 2;

Ошибка в строке возникает из-за неуместного терминатора оператора ; перед закрытием условия if.Так что если у вас есть ; в определенных константах, это может быть причиной ошибки.

1 голос
/ 14 июня 2011

Я вижу много ошибок в вашем коде.

Прежде всего, вы определяете kPortraitMode и kLandscapeMode, когда UIInterfaceOrientation (Portrait, LandscapeLeft, LandscapeRight и PortraitUpsideDown) являются частью перечисления, поэтому в этом нет необходимости.

Относится к этому первому пункту. Вы предполагаете, что все, кроме UIInterfaceOrientationPortrait, является ландшафтом, что не соответствует действительности, поскольку существует UIInterfaceOrientationPortraitUpsideDown, хотя, если вы не разрешите ориентацию вверх ногами, все должно быть в порядке. Тем не менее, плохая практика.

Во-вторых, вы создаете свой собственный ivar для viewOrientation, когда UIViewController уже имеет свойство interfaceOrientation, так что это лишняя память, которую вы тратите впустую, а также время обработки, назначая ориентацию при ее вращении в willAutorotateToInterfaceOrientation: withDuration:.

И, наконец, при использовании перечислений, imo лучше использовать switch, чем if; Вы пишете меньше кода для сравнения, и это более понятно.

Вот как я это сделаю:

double height = 0.0;
switch(self.interfaceOrientation){
  case UIInterfaceOrientationPortrait:
  case UIInterfaceOrientationPortraitUpsideDown:
    height = 263.0;
    break;
  case UIInterfaceOrientationLandscapeLeft:
  case UIInterfaceOrientationLandscapeRight:
    height = 320;
    break;
}
1 голос
/ 14 июня 2011

В вашем реальном коде у вас есть точка с запятой после #define kPortraitMode?Выкладываю;после #define - распространенная ошибка.

Кроме того, строка Byte:viewOrientation; выглядит подозрительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...