2012-03-30 33 views
6

Dưới đây là câu lệnh Chuyển/Trường hợp hiển thị thông báo lỗi khi không thể gửi email. Đối với hầu hết các phần, mọi thứ dường như đúng, nhưng khi tôi đặt một UIAlertView vào câu lệnh switch tôi nhận được một lỗi trong Xcode:Sử dụng Tuyên bố Chuyển đổi trong Obj-C

Xcode error

switch (result) { 
    case MFMailComposeResultCancelled: 
     NSLog(@"Result: Mail sending canceled"); 
     break; 
    case MFMailComposeResultFailed: 
     NSLog(@"Result: Mail sending failed"); 
     UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed" 
                  message:@"The email could not be sent." 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 

     [message show]; 
     break; 
    default: 
     NSLog(@"Result: Mail not sent"); 
     break; 
} 

Tại sao nó tạo ra một lỗi khi tôi đặt mã bên trong case?

+0

xem [nhập liên kết mô tả ở đây] [1] [1]: http://stackoverflow.com/questions/366073/instantiating-new-object-within-switch-block-why- không-it-fail – TompaLompa

+0

Không, UIAlertView không cần IBAction. – c0d3Junk13

+0

bản sao có thể có của [Khi chuyển đổi dự án thành sử dụng ARC "trường hợp chuyển đổi nằm trong phạm vi được bảo vệ" nghĩa là gì?] (Http://stackoverflow.com/questions/7562199/when-converting-a-project-to-use- arc-what-does-switch-case-là-trong-bảo vệ-scop) – ughoavgfhw

Trả lời

14

Đặt nó trong dấu ngoặc:

case MFMailComposeResultFailed: { 
    NSLog(@"Result: Mail sending failed"); 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed" 
                 message:@"The email could not be sent." 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 

    [message show]; 
    break; 
    } 
+0

tại sao? vui lòng giải thích –

+0

Xem @Phillip Mills trả lời hoặc thực hiện tìm kiếm và bạn sẽ tìm thấy nhiều giải thích. – bandejapaisa

+0

Ok tôi hiểu rồi .......... –

12

Vấn đề là khai báo biến bên trong trường hợp của một công tắc. Trình biên dịch là khó chịu về việc cố gắng tìm ra phạm vi khi chỉ một số mã được thực hiện. Nếu bạn đặt dấu ngoặc xung quanh nội dung của trường hợp 'không thành công', nó sẽ là OK vì nó hạn chế phạm vi.

Các vấn đề liên quan