tôi đang ủng hộ 10.4+ bằng cách chọn API nhiều nhất hiện nay trong thời gian chạy:Đàn áp " '...' bị phản đối" khi sử dụng respondsToSelector
if ([fileManager respondsToSelector:@selector(removeItemAtPath:error:)])
[fileManager removeItemAtPath:downloadDir error:NULL];
else
[fileManager removeFileAtPath:downloadDir handler:nil];
Trong trường hợp này, 10.5 và lên sẽ sử dụng removeItemAtPath:error:
và 10.4 sẽ sử dụng removeFileAtPath:handler:
. Tuyệt vời, nhưng tôi vẫn nhận được cảnh báo trình biên dịch cho các phương pháp cũ:
warning: 'removeFileAtPath:handler:' is deprecated [-Wdeprecated-declarations]
Có một cú pháp của if([… respondsToSelector:@selector(…)]){ … } else { … }
rằng gợi ý trình biên dịch (Clang) để không cảnh báo trên dòng đó?
Nếu không, có cách nào gắn thẻ dòng đó bị bỏ qua cho -Wdeprecated-declarations
không?
Sau khi xem một số câu trả lời, hãy để tôi làm rõ rằng làm cho trình biên dịch hiểu rằng những gì tôi đang làm không phải là giải pháp hợp lệ.
Bạn có thể kết thúc cuộc gọi trong '#pragma clang diagnostic ignore" -Wdeprecated-declarationations "' và sau đó '#pragma clang diagnostic warning" -Wdeprecated-declarationations "' nếu Clang trên OS X không hỗ trợ 'push' ? – Wevah
+1 Đây là giải pháp tốt nhất! – trojanfoe
@sidnicious bạn có thể cho tôi biết cách biết tên cụ thể của cảnh báo hay không. Ý tôi là, nó cho thấy cảnh báo " bị xóa" nhưng chúng tôi sử dụng "-Wdrecrecated-declarationations". Làm thế nào để tìm thấy tên atual chúng ta cần phải sử dụng trong chẩn đoán clang –
Johnykutty