2013-03-06 63 views
5

Trong ứng dụng của tôi, tôi cần trình bày bộ điều khiển chế độ xem. Phương pháp 6.0 để trình bày một bộ điều khiển khung nhìn là presentViewController: animated: completion :. Tôi cũng muốn hỗ trợ 4,3. Trong 4.3 phương thức được gọi là presentModalViewController: animated :. Vì vậy, tôi sử dụng respondsToSelector: để tìm hiểu xem phương pháp được hỗ trợ. Nhưng khi tôi biên dịch ứng dụng cho 6.0 nó mang lại thông điệp cảnh báo nhưKiểm tra phiên bản iOS đưa ra cảnh báo

presentModalViewController: hoạt hình: bị phản đối: thứ nhất bị phản đối trong iOS 6,0

bất cứ ai có thể biết làm thế nào để thoát khỏi cảnh báo này. Tôi cũng không có thiết bị 4.3 để kiểm tra xem nó có hoạt động hay không. Tôi cần phải giả định rằng mã tôi viết nên làm việc trên 4.3.

if([myViewController respondsToSelector:@selector(presentModalViewController:animated:)]){ 
     [myViewController presentModalViewController:anotherViewController animated:YES]; 
    }else{ 
     [myViewController presentViewController:anotherViewController animated:YES completion:nil]; 
    } 
+1

Bỏ qua cảnh báo hoặc tắt cảnh báo: http://stackoverflow.com/a/4133201/427309 –

Trả lời

3

bạn có thể làm kiểm tra ngược lại cho respondsToSelector nó có thể giúp đỡ, và đây là con đường để đi thực sự nếu bạn đang hỗ trợ các phiên bản cũ :)

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
    [self presentViewController:anotherViewController animated:YES completion:nil]; 
} else { 
    [self presentModalViewController:anotherViewController animated:YES]; 
} 
1

Bạn có thể bật/cảnh báo vô hiệu hóa với pragma vào mã của bạn, nhưng chúng không phải là rất thân thiện để sử dụng. Và tôi không nhớ pragma cụ thể cho loại cảnh báo này. Nhưng một số người ở đây sẽ nói với bạn.

Bằng cách này bạn có thể sử dụng một đơn giản

[id performSelector:<#(SEL)#> withObject:<#(id)#>] 

sẽ làm các trick

+0

Ràng buộc thời gian chạy của nó và mất nhiều thời gian hơn so với cuộc gọi thông thường. – Apurv

+2

@Apurv no, '-performSelector:' thường chỉ nhanh như cuộc gọi phương thức thông thường - tất cả đều biên dịch thành 'objc_msgSend'. –

+1

objc_msgGửi được tạo bởi trình biên dịch, cả hai để thực hiện: như một tin nhắn thẳng. Sự khác biệt duy nhất ở đây nó không phải là loại được kiểm tra bởi trình biên dịch. Đây là những gì saika muốn. Việc ràng buộc luôn được thực hiện tự động. –

0

tôi đã nhầm lẫn đặt mục tiêu triển khai đến 6.0. Vì vậy, nó đã được hiển thị thông báo cảnh báo được đề cập. Không có thông báo cảnh báo sau khi tôi thay đổi mục tiêu triển khai thành 4.3 (mà tôi cần hỗ trợ). Cảm ơn câu trả lời !.

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