if语句后变量不起作用

时间:2013-07-05 11:06:35

标签: objective-c if-statement parameter-passing

这是我目前的代码,

CGRect screenRect = [[UIScreen mainScreen] bounds];    
CGRect *FullViewRect = NULL;
if (screenRect.size.height == 568.0f) // iPhone 5
   {CGRect FullViewRect = CGRectMake(0, 0, 320, 568);}
else
   {CGRect FullViewRect = CGRectMake(0, 0, 320, 480);}

UILabel *Count3 = [[UILabel alloc] initWithFrame: FullViewRect];
Count3.backgroundColor = [UIColor blueColor];
[self.view addSubview:Count3];

但是Count3不可见? 没有给出错误,但FullViewRect没有价值。

2 个答案:

答案 0 :(得分:5)

我想知道这是如何编译的。它不应该。

UILabel *Count3 = [[UILabel alloc] initWithFrame: FullViewRect];

这是错误的,因为FullViewRectCGRect *,但该方法需要CGRect。 (为什么你会假设而不是阅读文档?)

此外,您正在if语句的分支内重新声明该变量。您的代码需要(变量名称固定为以小写字母开头):

CGRect fullViewRect;
if (screenRect.size.height == 568.0f) {
    fullViewRect = CGRectMake(0, 0, 320, 568);
} else {
    fullViewRect = CGRectMake(0, 0, 320, 480);
}

但是,这是一个过于基本的东西。如果你不理解这一点,你应该学习C并且不尝试制作iOS应用程序。

还有一个错误:

if (screenRect.size.height == 568.0f)

从不 尝试比较像这样的浮点数,因为它们并不准确。请改用这样的东西:

if (screenRect.size.height > 500.0f)

或类似。

答案 1 :(得分:2)

失败的原因是您的ifelse语句都声明了 new FullViewRect,它隐藏了您实际想要更改的内容。将您的代码修改为:

CGRect screenRect = [[UIScreen mainScreen] bounds];    
CGRect FullViewRect;
if (screenRect.size.height == 568.0f) // iPhone 5
   {FullViewRect = CGRectMake(0, 0, 320, 568);}
else
   {FullViewRect = CGRectMake(0, 0, 320, 480);}

UILabel *Count3 = [[UILabel alloc] initWithFrame: FullViewRect];
Count3.backgroundColor = [UIColor blueColor];
[self.view addSubview:Count3];