проблема с переключением дел ... [цель c] - PullRequest
2 голосов
/ 23 марта 2011

если прокомментировать строку nslog, возникает ошибка:

Семантическая проблема: использование необъявленного идентификатора 'alert'

switch ([[array objectAtIndex:0]intValue]) {
    case 2:
        NSLog(@"Allergie alarm");   << commenting this, gives me an error!!!
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle: @"blabal"
                              message: @"balbalb"
                              delegate: nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        break;
    default:
        break;
}

Ответы [ 8 ]

7 голосов
/ 23 марта 2011

Чтобы объявить новую переменную внутри case, вам нужно открыть новую область видимости. Чтобы открыть новую область, просто используйте фигурные скобки, как уже написали другие.

4 голосов
/ 23 марта 2011

Вы используете многострочную выписку. Ваши заявления должны быть приложены в { и }. Отсюда:

case 2: {
    NSLog(@"Allergie alarm");
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: @"blabal"
                          message: @"balbalb"
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
    break;
}
1 голос
/ 23 марта 2011

вы не должны объявлять переменные внутри switch

попробуйте этот способ

UIAlertView *alert;
switch ([[array objectAtIndex:0]intValue]) {
    case 2:

    alert = [[UIAlertView alloc]
                              initWithTitle: @"blabal"
                              message: @"balbalb"
                              delegate: nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        break;
    default:
        break;
}

или заключите его в фигурные скобки

    case 2:
    {
    UIAlertView * alert = [[UIAlertView alloc]
                              initWithTitle: @"blabal"
                              message: @"balbalb"
                              delegate: nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        break;
    default:
        break;
    }
1 голос
/ 23 марта 2011
case 2:
{
    NSLog(@"Allergie alarm");   << commenting this, gives me an error!!!
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: @"blabal"
                          message: @"balbalb"
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
    break;
}

Вложите утверждения в {} делает свое дело.

1 голос
/ 23 марта 2011

Используйте ниже

switch ([[array objectAtIndex:0]intValue]) {
    case 2:
       {
           NSLog(@"Allergie alarm");   << commenting this, gives me an error!!!
           UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle: @"blabal"
                              message: @"balbalb"
                              delegate: nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil];
           [alert show];
           [alert release];
        }
        break;
    default:
        break;
}

EDIT: Используйте фигурные скобки для утверждения Case.

0 голосов
/ 23 марта 2011

Я думаю, что проблема не в том, как предмет. проблема в том, что когда он комментирует оператор nslog, то компилятор читает код примерно так

вариант 2: UIAlertView * alert ....

означает, что это параметр случая 2. я проверяю это, единственная первая строка после второго случая не должна быть строкой объявления переменной, так что это означает, что проблема не в области видимости

switch (2) {
     case 2:
         ;
        //NSLog(@"Allergie alarm");  // << commenting this, gives me an error!!!
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"blabal" message: @"balbalb" delegate: nil  cancelButtonTitle:@"OK" otherButtonTitles:nil];
         [alert show];
         [alert release];
         break;

     default:
         break;
 }
0 голосов
/ 23 марта 2011
////some code
switch ([[array objectAtIndex:0]intValue]) {
  case 2:
    NSLog(@"Allergie alarm");   << commenting this, gives me an error!!!
    [self showAlert];
    break;
default:
    break;
}
////some code




- (void) showAlert{
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: @"blabal"
                          message: @"balbalb"
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
  } 
0 голосов
/ 23 марта 2011

установить делегат оповещения

 UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle: @"blabal"
                              message: @"balbalb"
                              delegate: self
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil];

С уважением, Shyam

...