2013-04-09 6 views
2

Имейте самую причудливую проблему, которую я не могу понять. В приведенном ниже методе оператор switch не вводится. Когда я распечатываю значение warningAlertViewType, это правильно, но оператор switch не активируется по какой-либо причине. Раньше я использовал ту же самую методологию для переключения, и все было хорошо.Вывод переключателя не вводится?

Кто-нибудь знает, что может произойти, чтобы вызвать это?

+ (WarningAlertView*) warningAlertViewWithType:(WarningAlertViewType)warningAlertViewType 
    { 
     WarningAlertView *warningAlertView = nil; 
     NSLog(@"WarningAlertViewType1: %d", warningAlertViewType); 
     switch (warningAlertViewType) 
     { 
       NSLog(@"Test1"); 
      case WarningAlertViewTypeExit:     warningAlertView = [[ExitWarningAlertView alloc] init]; break; 
      case WarningAlertViewTypeFacebook:    warningAlertView = [[FacebookWarningAlertView alloc] init]; break; 
      case WarningAlertViewTypeDelete:    warningAlertView = [[DeleteWarningAlertView alloc] init]; break; 
      case WarningAlertViewTypePhotoLibrary:   warningAlertView = [[PhotoLibraryWarningAlertView alloc] init]; break; 
      case WarningAlertViewTypeBack:     warningAlertView = [[BackWarningAlertView alloc] init]; break; 
      default: break; 
     } 
     NSLog(@"Test2"); 
     return [warningAlertView autorelease]; 
    } 
+0

Вы хотите сказать, что 'Test1' должен быть выдан? Не думайте, что вы можете так поступить. – epatel

+0

Да ... это не будет выполнено в коммутаторе? –

+0

Как насчет результата журнала этого оператора NSLog (@ "WarningAlertViewType1:% d", warningAlertViewType); ??? – Tirth

ответ

1

Измени переключатель заявление что-то вроде ниже

switch (warningAlertViewType) { 

case WarningAlertViewTypeExit: 
    NSLog(@"WarningAlertViewTypeExit"); 
    warningAlertView = [[ExitWarningAlertView alloc] init]; 
    break; 

case WarningAlertViewTypeFacebook: 
    NSLog(@"WarningAlertViewTypeFacebook"); 
    warningAlertView = [[FacebookWarningAlertView alloc] init]; 
    break; 

case WarningAlertViewTypeDelete: 
    NSLog(@"WarningAlertViewTypeDelete"); 
    warningAlertView = [[DeleteWarningAlertView alloc] init]; 
    break; 

case WarningAlertViewTypePhotoLibrary: 
    NSLog(@"WarningAlertViewTypePhotoLibrary"); 
    warningAlertView = [[PhotoLibraryWarningAlertView alloc] init]; 
    break; 

case WarningAlertViewTypeBack: 
    NSLog(@"WarningAlertViewTypeBack"); 
    warningAlertView = [[BackWarningAlertView alloc] init]; 
    break; 

default: 
    NSLog(@"default"); 
    break; 
} 

Я на самом деле поклонник строгого именования, как это. Тогда можно использовать макросы (что некоторые ненавидят, я знаю), чтобы значительно сократить это.

switch (warningAlertViewType) { 

#define CASE(_type) \ 
case WarningAlertViewType ## _type: \ 
    NSLog(@"WarningAlertViewType" #_type); \ 
    warningAlertView = [[_type ## WarningAlertView alloc] init]; \ 
    break 

CASE(Exit); 
CASE(Facebook); 
CASE(Delete); 
CASE(PhotoLibrary); 
CASE(Back); 

default: 
    NSLog(@"default"); 
    break; 

#undef CASE 

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