2012-01-19 69 views
1

我有我目前的基礎sdk設置爲iOS 4.2。 我有這樣的方法:基地sdk 4.3給出了錯誤,但5.0並沒有給出任何錯誤

- (void) setNavigationBarBackground 
    { 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { 
     //iOS 5.0 
     if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) 
     { 
      [self setBackgroundImage:[UIImage imageNamed:kImageNavBar] forBarMetrics:UIBarMetricsDefault]; 
     } 
    } 
    else 
    { 
     //iOS 4.whatever and below 
     UIImageView *imageView = (UIImageView *)[self viewWithTag:kNavigationBarBackgroundImageTag]; 
     if (imageView == nil) 
     { 
      imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kImageNavBar]]; 
      [imageView setTag:kNavigationBarBackgroundImageTag]; 
      [self insertSubview:imageView atIndex:0]; 
      [imageView release]; 
     } 
    } 
} 

當我建立我的項目,我遇到一個編譯時錯誤爲:

'UIBarMetrics' Default undeclared (first use in this function) 

當我將基地SDK爲5.0,它編譯沒有任何錯誤。

有誰知道如何使用base sdk 4.2編譯它?

回答

4

對於具體的情況下,使用此:

#if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){ 
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"TitleBar"] forBarMetrics:UIBarMetricsDefault]; 
} 
#endif 

在一般情況下,一個很好的方式在不同的SDK版本有條件地編譯是這樣的:

把這個頂部(連同進口):

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

然後,如果有一些操作系統特定的功能,使用起來就像這樣(我使用AlertView例如,預iOS5的,UIAlertView中不支持內部自定義的TextView它,所以我有我自己的自定義AlertView。在iOS5中,該黑客不工作,我有,因爲它支持自定義textViews)使用UIAlertView中:

if (SYSTEM_VERSION_LESS_THAN(@"5.0")) { 

TextAlertView *alert = [[TextAlertView alloc] initWithTitle:@"xxxYYzz" 
                message:@"" 
                delegate:self cancelButtonTitle:@"Add" 
              otherButtonTitles:@"Cancel", nil]; 
alert.textField.keyboardType = UIKeyboardTypeDefault; 
alert.tag = 1; 
self.recipeNameTextField = alert.textField; 
[alert show]; 
[alert release]; 
} 
else { 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"xxYYzz" 
              message:@"" 
              delegate:self cancelButtonTitle:@"Add" 
            otherButtonTitles:@"Cancel", nil]; 
    alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
    self.recipeNameTextField = [alert textFieldAtIndex:0]; 

    [alert show]; 
    [alert release]; 
} 

希望它可以幫助

+0

gr8工作Anshu。 Thanx亞爾。 :) – anshul

0

將您的「基礎SDK」設置爲「最新的iOS」。

將「iOS部署目標」設置爲您希望支持的最低版本,本例中爲「iOS 4.2」。

+0

沒有老闆,其給予同樣的錯誤 「UIBarMetricsDefault」未申報 – anshul

+0

咦,但你說,如果你設置基礎sdk爲5.0,它「編譯好」... – gerry3

+0

雅當我設置基礎sdk 5.0(與部署目標4.0),然後編譯好,但是當我編譯它使用基礎sdk 4.2 (ios部署目標4.0以及4.2),那麼它給我這個特別的錯誤 – anshul

相關問題