2012-01-19 14 views
1

現在のベースsdkをiOS 4.2に設定しました。 私はこの方法を持っている:私は私のプロジェクトをビルドするときBase 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]; 
     } 
    } 
} 

、私のようにコンパイル時エラーが発生した:私は5.0に私のベースSDKを設定すると

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

、それはエラーなしでコンパイルされます。

誰も私が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) 

その後、いくつかのOS固有の機能がある場合は、私は例として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仕事安住。 Thanx yaar。 :) – anshul

0

"Base SDK"を "Latest iOS"に設定します。

"iOS Deployment Target"をサポートする最小バージョン(この場合は "iOS 4.2")に設定します。具体的にあなたのケースのための

+0

ありませんボスホープを、その同じエラー 「UIBarMetricsDefault」宣言されていない – anshul

+0

許を与えますしかし、あなたは、5.0にbase sdkを設定した場合、それは "コンパイルされています" ... – gerry3

+0

ya私は基盤のSDK 5.0を設定しました(配備ターゲット4.0で)、それはうまくコンパイルされましたが、 (ios配備ターゲット4.0と4.2)、それは私にこの特定のエラーを与える – anshul

関連する問題