1

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

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

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

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

当整数达到 50 时,什么也没有发生。我哪里出错了?

整数在 IBAction 中像这样更改:

 count+=10;

如果我删除 if 语句并只显示警报,它会在视图加载时显示。所以警报不是问题。

有人指出,如果这段代码只在viewDidLoad方法中运行一次,并且在后期将整数更改为50,它不会等待整数为50,而是会看到值不是50而不执行永远保持警惕。

那么我将如何用代码观察整数,并在整数为 50执行警报,但不在增加整数的操作中调用警报?

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

4

9 回答 9

4

当你说

但是当整数达到 50 时,什么也没有发生

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

于 2009-07-11T23:43:40.190 回答
1

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

希望有帮助!

于 2009-07-11T23:40:24.377 回答
1

尝试添加

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

在您添加 10 后,在同一个 IBAction 中。

于 2009-07-12T00:55:55.963 回答
1

查看 Key-Value 观察

如果您将计数器设置为属性,您应该能够设置一个观察者,该观察者会在值更改时触发。在该观察者中,您可以进行检查以触发警报。

于 2009-07-13T23:37:54.577 回答
0

尝试

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

看看问题是否存在。很难说 count 是混乱还是警觉,但问题不在于您的 if 语句本身。

于 2009-07-11T23:40:55.967 回答
0

有几件事要尝试,

  • 在 if 语句上设置断点
  • 将 if 语句更改为count >= 50
  • count 真的是 int 还是浮点数?
于 2009-07-11T23:44:41.263 回答
0

最简单的答案:让所有增加的东西count都通过控制器中的一种方法来执行,并让该方法检查是否该显示警报了。

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

于 2009-07-12T02:02:50.693 回答
0

我不明白,为什么不能在增加计数器的代码中显示警报?它只是需要对 UIAlertView 的引用......或者发布警报持有代码正在收听的通知。

于 2009-07-12T02:12:23.273 回答
0

ViewDidLoad 仅在您的视图被加载时运行 - 即在它被创建时。之后它不会再次运行,除非有特殊情况。

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

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

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

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

if ([self checkCounter])
{
//do stuff when it's 50
}
于 2011-02-05T02:08:19.067 回答