iPhone:我正在尝试使用if语句,但它对我不起作用

时间:2009-07-11 23:36:59

标签: iphone cocoa-touch if-statement uialertview

(几乎解决了,但不完全) (我的临时解决方案是使用void方法并在每个按钮中调用它,这样我就可以编辑多个按钮使用的代码,而不是在进行改进时必须编辑每个按钮if语句)

我敢打赌,这是一个非常简单的错误,但是我找不到它。

当整数达到50时,我正试图显示先前定义的警报;这是我在viewDidLoad方法中使用的if语句:

if(count == 50){
    [alert show];
}

当整数达到50时,没有任何反应。我哪里出错?

整数在IBAction中改变如下:

 count+=10;

如果我删除if语句并将警报保留为show,则会在视图加载时显示。所以警报不是问题。

有人指出,如果此代码仅在viewDidLoad方法中运行一次,并且整数在稍后阶段更改为50,则不会等待整数为50,而是将看到值不是50并且不执行警报。

那么如何用代码观察整数,并在整数为50时执行警告, 但是不要在增加整数的动作中调用警报?

哦,顺便说一句,我尝试在动作中调用if语句来增加整数并且有效但是我有大约100个按钮增加整数计数并检查每个按钮中的值是否为50所有复制和粘贴都有点耗费空间和时间。此外,我计划在整数达到50时不仅仅发出警报。我确定有一种更有效的方法来检查整数计数的值是否为50。

9 个答案:

答案 0 :(得分:4)

当你说

  

但当整数达到50时,没有任何事情发生

这让我相信在 -viewDidLoad方法运行之后你正在改变整数值。您的if语句仅在视图加载时评估一次,因此如果您在该点之后更改整数值,则需要将警报视图添加到更改整数的任何内容。

答案 1 :(得分:1)

这应该没问题 - Objective-C是一个位于C之上的薄层,因此有效的C语法应该可行。计算什么样的变量?您希望将其定义为int,而不是NSNumber。 NSNumber是一个包装数字的类,因此它可以用作Objective-C对象 - 但是你不能使用==语法来比较它们。

希望有所帮助!

答案 2 :(得分:1)

尝试添加

if(count == 50){
    [alert show];}

在您将10添加到计数后立即进行相同的IBAction。

答案 3 :(得分:1)

Check out Key-Value observing

如果您将计数器设为属性,则应该能够设置一个在值发生变化时触发的观察者。在那个观察者中,你可以进行检查以发出警报。

答案 4 :(得分:0)

尝试

NSLog(@"count is %d",count); 

并查看问题是否存在。很难说计数是搞砸还是警告,但问题不在于你的if语句本身。

答案 5 :(得分:0)

要尝试的几件事,

  • 在if语句
  • 上设置断点
  • 将if语句更改为count >= 50
  • 算真的是一个int还是浮点数?

答案 6 :(得分:0)

最简单的答案:让所有增加count的内容通过控制器中的一个方法执行此操作并使用该方法检查是否需要显示警报。

更复杂的答案涉及观察价值:Key-Value Observing。您可以设置一个观察者来观察该值,并在它达到50时响应警报。但这将需要更多的代码,并且比仅引入一个处理行为的中心方法更复杂且容易出错。

答案 7 :(得分:0)

我不明白,为什么你不能在增加计数器的代码中显示警告?它需要一个对UIAlertView的引用...或者发布一个警告控制代码正在收听的通知。

答案 8 :(得分:0)

ViewDidLoad仅在加载视图时运行 - 即在创建视图时运行。除非特殊情况,否则它将无法再次运行。

如果您希望每次按下按钮并增加计数时检查计数,请在IBAction中执行此操作。

你可以制作一个像这样检查计数器的方法

-(BOOL) checkCounter
{
  return count == 50;
}

在你增加它之后,在你的按钮中调用它:

if ([self checkCounter])
{
//do stuff when it's 50
}