2013-04-09 47 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 2013-04-09 22:53:03

+0

是的......那將不會在交換機中執行? – 2013-04-09 22:56:40

+0

這條語句的日誌結果怎麼樣NSLog(@「WarningAlertViewType1:%d」,warningAlertViewType); ??? – Tirth 2013-04-09 22:59:32

回答

1

更改您的switch語句類似下面

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 

}