2011-06-26 37 views
6

Tôi có một số hằng số không được chấp nhận trong dự án của mình. Họ cần phải ở lại. Tôi không muốn được cảnh báo về họ, nhưng tôi muốn được cảnh báo nếu các hằng số không được chấp nhận khác sẽ xuất hiện trong dự án của tôi sau này.Xcode/iOS - loại bỏ cảnh báo không dùng nữa cho các hằng số cụ thể?

tiêu đề của Apple tuyên bố như sau:

extern NSString * const NameOfStringConstant __OSX_AVAILABLE_BUT_DEPRECATED(version availability info here) 

Làm thế nào tôi có thể tắt cảnh báo?

câu trả lời liên quan cho việc bịt miệng cảnh báo cho một phương pháp NỮA here
câu trả lời có liên quan cho việc bịt miệng những lời cảnh báo về một sự chuyển đổi chuỗi phản here

Trả lời

1

Câu trả lời đúng cho câu hỏi này là không sử dụng các hằng số phản đối. Kiểm tra tài liệu theo cách được đề xuất để hoàn thành một cái gì đó ngay bây giờ. Trên các phương pháp/hằng số không được chấp nhận/bất kỳ điều gì, hầu như luôn có liên kết đến "thay thế" nếu bạn muốn. Sử dụng thay vào đó. Bằng cách này, mã của bạn không bí ẩn phá vỡ khi những người biến mất mãi mãi, nhưng người dùng của bạn vẫn có một xây dựng được xây dựng chống lại sdk cũ, và bây giờ mã của họ bị treo, hoặc tệ hơn, những điều kỳ lạ.

+6

Tôi phải sử dụng các hằng số, vì các phiên bản trước của iOS không có các phiên bản không được hỗ trợ. Tôi kiểm tra sự tồn tại của cái không được dùng và sử dụng nó nếu có. Nếu không, tôi phải rơi vào hằng số không được chấp nhận. Mã mẫu của Apple cũng giống như vậy. –

+0

Làm thế nào sớm? Đừng nói với tôi rằng bạn là một trong những người vẫn ủng hộ 3.x? Bởi hầu hết các tài khoản của mọi người, ít hơn 2% người dùng đang chạy iOS 3.x (tính cả người dùng iPad) và ít hơn 40% thực sự có thiết bị * CAN RUN * iOS 3.x – jer

+1

được giới thiệu trong 4.0 –

2

Thêm vào cờ biên dịch:

-Wno-deprecated-declarations 

hoặc trong Xcode, chọn "No" để lựa chọn xây dựng thiết lập:

Warn About Deprecated Functions 

và sau đó nếu bạn nhìn vào việc xây dựng đầu ra (Apple +7 trong Xcode 4), bạn sẽ thấy cờ trình biên dịch nói trên.

1

Đây là câu trả lời số 1 trong google và tôi tin rằng có một số trường hợp faire khi sử dụng phương pháp không dùng nữa hữu ích và khi bạn muốn tránh cảnh báo để giữ bản dựng "sạch". Các giải pháp này được lấy cảm hứng từ: http://vgable.com/blog/2009/06/15/ignoring-just-one-deprecated-warning/

Ý tưởng là tuyên bố một giao thức mới có cùng phương pháp (nhưng không phản đối tất nhiên) và truyền đối tượng đến giao thức đó. Bằng cách này bạn có thể gọi phương thức mà không nhận được cảnh báo và không loại bỏ tất cả cảnh báo không dùng nữa.

Ví dụ: Nếu bạn muốn tích hợp TestFlight trong ứng dụng của mình, tài liệu SDK đề xuất truyền UniqueIdifier của thiết bị trong khi ở BETA. Điều này có thể giúp theo dõi người thử nghiệm nào gặp sự cố. Phương pháp này không được Apple chấp nhận (và họ sẽ không cho phép bạn gửi ứng dụng) nhưng tôi tin rằng đây là một ví dụ tốt về việc sử dụng phương pháp không dùng nữa.

Trong App ủy quyền của bạn:

/* This is to avoid a warning when calling uniqueIdentifier for TestFlight */ 
@protocol UIDeviceHack <NSObject> 

- (NSString*) uniqueIdentifier; 

@end 


@implementation MyAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [TestFlight takeOff:@"Your-Testflight-team-id"]; 
    // TODO: Remove this in production (forbidden APIs) - Used here to improve beta reporting. 
    [TestFlight setDeviceIdentifier:[(id<UIDeviceHack>)[UIDevice currentDevice] uniqueIdentifier]]; 

    // ... 
} 
+0

Câu hỏi đặt ra về hằng số. –

+0

Thật vậy ... xin lỗi về điều đó. Nó vẫn xuất hiện đầu tiên trong tìm kiếm google của tôi. Có thể giúp ai đó. Cảm ơn phản hồi mặc dù. – sarfata

+0

+1: tốt nhất :) Tôi vẫn sẽ sử dụng [công thức này] (http://blog.goosoftware.co.uk/2012/04/18/unique-identifier-no-warnings/) –

23

Tôi biết đây là một chủ đề cũ nhưng hôm nay tôi đã đối phó với không ít phiền toái như vậy.

Ví dụ: bạn muốn loại bỏ cảnh báo ngừng sử dụng gây phiền nhiễu nhưng chỉ dành cho [[UIDevice currentDevice] uniqueIdentifier]] vì bạn có thể muốn sử dụng nó trong giai đoạn phát triển với TestFlight. Bạn vẫn muốn trình biên dịch cảnh báo bạn nếu bạn sử dụng một số tuyên bố không được chấp nhận khác do nhầm lẫn.

Tôi thích sarfata's answer: thực hiện công việc.Nhưng có nhiều hơn chính xác chính xác cách có sẵn:

Công thức sau đây được lấy từ The Goo Software Blog.

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#pragma clang diagnostic pop 

Đảm bảo bạn nhận xét dòng này trước khi xây dựng để phân phối. Hoặc chỉ cần sử dụng macro tiền xử lý để loại trừ các dòng này khỏi bản dựng bản phát hành.

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