我有一个应用程序,它部分循环遍历 NSSet 的内容,并为集合中找到的每个项目显示 UIAlertView。当集合中只有一个项目时,UIAlertView 会正常运行。但是,如果有多个,第一个视图会闪现(通常显示集合中最后一项的内容),然后在没有任何用户干预的情况下消失。然后将显示 NSSet 中的第一项并等待响应,然后再显示 NSSet 中的下一项,依此类推。
这与这个未解决的问题中描述的体验相同:IPHONE: UIAlertView 在自定义函数/IBAction 中调用了两次
这是代码:
#import "CalcViewController.h"
@interface CalcViewController()
@property (nonatomic) int variablesCount;
@property (nonatomic, strong) NSMutableDictionary *variablesSet;
@end
@implementation CalcViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.variablesSet = [[NSMutableDictionary alloc] init];
}
- (IBAction)variablePressed:(UIButton *)sender
{
[[self calcModel] setVariableAsOperand:sender.titleLabel.text];
self.expressionDisplay.text = [[self calcModel] descriptionOfExpression:self.calcModel.expression];
}
- (IBAction)solveExpressionPressed:(UIButton *)sender {
self.variablesCount = 0;
[self.variablesSet removeAllObjects];
NSSet *variablesCurrentlyInExpression = [[NSSet alloc] initWithSet:[CalcModel variablesInExpression:self.calcModel.expression]];
self.variablesCount = [variablesCurrentlyInExpression count];
if (variablesCurrentlyInExpression){
for (NSString *item in variablesCurrentlyInExpression) {
UIAlertView *alertDialog;
alertDialog = [[UIAlertView alloc] initWithTitle:@"Enter value for variable"
message:item
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
alertDialog.alertViewStyle=UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alertDialog textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
[alertDialog show];
}
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0){
if ([[alertView textFieldAtIndex:0] text]){
self.variablesSet[alertView.message] = [[alertView textFieldAtIndex:0] text];
}
}
if ([self.variablesSet count] == self.variablesCount){
NSLog(@"time to solve");
[[self calcDisplay] setText:[NSString stringWithFormat:@"%g", [CalcModel evaluateExpression:self.calcModel.expression usingVariableValues:self.variablesSet]]];
}
}
我检查了触发solveExpressionPressed方法的按钮后面的IBActions,这是唯一存在的。我还在 [alertDialog show] 之前放置了一些日志记录;当 variablesCurrentlyInExpression NSSet 包含两个值时,它仅被调用两次,但 UIAlertView 出现了 3 次(闪烁一次)。
最后,我在没有以下代码的情况下尝试了它:
UITextField * alertTextField = [alertDialog textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
并且问题仍然存在,所以我不认为是那样。
我已经坚持了一段时间,还没有弄清楚(因此发帖!!),所以任何帮助都将不胜感激。
谢谢