Objective c 基本sdk 4.3给出了错误,但5.0没有';我不给任何错误

Objective c 基本sdk 4.3给出了错误,但5.0没有';我不给任何错误,objective-c,ios4,ios5,uinavigationbar,Objective C,Ios4,Ios5,Uinavigationbar,我将当前的基本sdk设置为iOS 4.2。 我有这个方法: - (void) setNavigationBarBackground { if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { //iOS 5.0 if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]

我将当前的基本sdk设置为iOS 4.2。 我有这个方法:

    - (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时,它编译时没有任何错误

有人知道如何使用基本sdk 4.2编译它吗?

将您的“基本sdk”设置为“最新iOS”

将“iOS部署目标”设置为要支持的最低版本,在本例中为“iOS 4.2”。

将“基本SDK”设置为“最新iOS”


将“iOS部署目标”设置为您希望支持的最低版本,在本例中为“iOS 4.2”。

对于您的具体情况,请使用以下方法:

#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版本有条件编译的一个好方法是:

将其放在顶部(与导入一起):

然后,如果有一些特定于操作系统的功能,请像这样使用它们(我以AlertView为例。在iOS5之前,UIAlertView不支持其中的自定义文本视图,因此我有自己的自定义AlertView。在iOS5中,这种攻击不起作用,我必须使用UIAlertView,因为它支持自定义文本视图):


希望它能帮助您

针对您的具体情况,请使用以下方法:

#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版本有条件编译的一个好方法是:

将其放在顶部(与导入一起):

然后,如果有一些特定于操作系统的功能,请像这样使用它们(我以AlertView为例。在iOS5之前,UIAlertView不支持其中的自定义文本视图,因此我有自己的自定义AlertView。在iOS5中,这种攻击不起作用,我必须使用UIAlertView,因为它支持自定义文本视图):


希望它有帮助

No boss,当我设置基本sdk 5.0(部署目标为4.0)时,它会给出相同的错误'UIBarMetricsDefault'未声明,然后它编译得很好,但当我使用基本sdk 4.2(ios部署目标为4.0以及4.2)编译它时,它会给我这个特定的错误No boss,当我设置基本sdk 5.0(使用Deployment target 4.0)时,它给出了相同的未声明错误'UIBarMetricsDefault',然后它编译得很好,但当我使用基本sdk 4.2(ios Deployment target 4.0和4.2)编译它时,它给出了这个特定的错误
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];
 }