2012-09-25 53 views
7

Làm cách nào để bạn có thể hỗ trợ các tính năng của iOS6 trong ứng dụng có cài đặt Minimal Deployment Target thành iOS 5.0?Tính năng hỗ trợ có điều kiện của các tính năng iOS 6 trong ứng dụng iOS 5

Ví dụ: nếu người dùng có iOS 5, anh ta sẽ thấy một UIActionSheet, nếu người dùng có iOS 6, anh ta sẽ thấy UIActionSheet khác nhau cho iOS 6? Làm thế nào để bạn làm điều này? Tôi có Xcode 4.5 và muốn một ứng dụng chạy trên iOS 5.

Trả lời

19

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.

+1

Cảm ơn bạn đã trợ giúp! Một câu trả lời tuyệt vời! –

+0

Một niềm vui và cảm ơn cho lời khen about.me – Daniel

+0

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

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