Bạn nên luôn luôn phát hiện các phương pháp/tính năng có sẵn thay vì phiên bản iOS và sau đó giả định một phương thức khả dụng.
Xem Apple documentation.
Ví dụ, trong iOS 5 để hiển thị một bộ điều khiển xem phương thức chúng tôi sẽ làm một cái gì đó như thế này:
[self presentModalViewController:viewController animated:YES];
Trong iOS 6, phương pháp presentModalViewController:animated:
của UIViewController
được dùng nữa, bạn nên sử dụng presentViewController:animated:completion:
trong iOS 6, nhưng làm thế nào để bạn biết khi nào nên sử dụng cái gì?
Bạn có thể phát hiện phiên bản iOS và có tuyên bố nếu bạn sử dụng phiên bản cũ hoặc sau nhưng điều này rất dễ vỡ, bạn sẽ mắc lỗi, có thể một hệ điều hành mới hơn trong tương lai sẽ có cách mới để thực hiện việc này .
Các cách chính xác để xử lý này là:
if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
[self presentViewController:viewController animated:YES completion:^{/* done */}];
else
[self presentModalViewController:viewController animated:YES];
Bạn thậm chí có thể tranh luận rằng bạn nên nghiêm ngặt hơn và làm điều gì đó như:
if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
[self presentViewController:viewController animated:YES completion:^{/* done */}];
else if([self respondsToSelector:@selector(presentViewController:animated:)])
[self presentModalViewController:viewController animated:YES];
else
NSLog(@"Oooops, what system is this !!! - should never see this !");
Tôi không chắc chắn về UIActionSheet
ví dụ của bạn, theo như tôi biết điều này giống nhau trên iOS 5 và 6. Có thể bạn đang nghĩ đến UIActivityViewController
để chia sẻ và bạn có thể muốn quay trở lại số UIActionSheet
nếu bạn đang sử dụng iOS 5, vì vậy bạn có thể kiểm tra lớp học có sẵn, xem here làm thế nào để làm như vậy.
Cảm ơn bạn đã trợ giúp! Một câu trả lời tuyệt vời! –
Một niềm vui và cảm ơn cho lời khen about.me – Daniel
Bạn có thể liên kết đến khung trong cài đặt dự án, trong trường hợp khung có thể không có mặt trên tất cả các phiên bản, như trường hợp của bạn, bạn chỉ cần đặt bao gồm là tùy chọn thay vào đó là bắt buộc. ---- câu hỏi đã bị xóa .... câu hỏi/bình luận. – Daniel