2010-06-12 27 views
10

Hôm nay ứng dụng của tôi đã được phê duyệt, nhưng tôi nhận được email từ người dùng cho biết rằng nó bị lỗi. Tôi đã phát hiện ra rằngGọi setStatusBarHidden thích hợp trên mỗi phiên bản iOS

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide]; 

Có vấn đề, Vì người dùng có firmware 3.1.x API này không hoạt động và bị lỗi ứng dụng.

Vì vậy, tôi có thay thế nó với

if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2) 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide]; 
    else 
     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 

Câu hỏi của tôi ...

phải là những gì tôi đã làm là giải pháp tốt nhất?

Tại sao XCODE không cảnh báo tôi rằng SetStatusBarHidden withAnimation không có trong 3.0 trong khi tôi đặt phần mềm hệ điều hành Traget 3.0 của mình?

Tôi có phải kiểm tra mọi API để xem liệu API có hoạt động với Hệ điều hành đích của tôi không?

Cảm ơn bạn

Trả lời

23

Tôi khuyên bạn nên sử dụng đoạn mã sau đây thay vì kiểm tra phiên bản của hệ điều hành, thay vì kiểm tra xem bộ chọn hiện có sẵn hay không.

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES]; 
0

Đây có lẽ là điều tốt nhất để làm, ngoài việc giới hạn đơn đăng ký của bạn thành> = 3.2. anyways, bạn xcode nên cung cấp cho bạn một cảnh báo rằng thông báo SetStatusBarHidden withAnimation không được hỗ trợ ("có thể không phản hồi").

+0

tôi đã không nhận được cảnh báo bởi vì tôi đặt IPHONEOS_DEPLOYMENT_TARGET đến 3,0 không BASE SDK. Trên phiên bản xcode cuối cùng 3.2.3, tôi chỉ thấy firmware 4.0 và 3.2 là SDK cơ bản, tất cả những thứ khác đều bị thiếu. – iTarek

1

Thật không may, nếu bạn đang biên soạn với SDK 4.0 bằng cách sử dụng mô phỏng, các giải pháp trên sẽ cung cấp cho bạn một cảnh báo, mà theo mặc định được coi là một lỗi:

warning: 'setStatusBarHidden:animated:' is deprecated (declared at /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIApplication.h:267) 

Vì vậy, bạn có thể đặt 'Coi các cảnh báo là lỗi' thành sai trong cài đặt xây dựng hoặc bạn có thể sử dụng macro để có điều kiện bao gồm mã chính xác. Tôi đã SDK cơ sở của tôi thiết lập để Device 4.0, mục tiêu của tôi là os 3.1, và đang sử dụng macro này:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 
#if __IPHONE_OS_VERSION_MIN_REQUIRED > 30100 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#endif 
#endif 

Lưu ý rằng setStatusBarHidden: withAnimation đã có sẵn trong 3.2.

3

Chỉ sử dụng

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

thay vì

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 

Nó hoạt động mà không báo trước

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