我有一個應用程序部分循環遍歷NSSet的內容,併爲該集合中的每個項目顯示一個UIAlertView。當集合中只有一個項目時,UIAlertView正常運行。但是,如果有多個視圖,則第一個視圖會閃爍(通常是集合中最後一個項目的內容),然後在沒有任何用戶干預的情況下消失。 NSSet中的第一項將顯示並等待響應,然後顯示NSSet中的下一個項目,依此類推。UIAlertView顯示兩次
這是相同的經驗,在這個懸而未決的問題被描述:IPHONE: UIAlertView called twice in a custom function/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顯示]之前放置了一些日誌記錄;行,並且它只在variablesCurrentlyInExpression NSSet包含兩個值時調用兩次,但UIAlertView出現三次(閃爍一次)。
最後,我已經試過了沒有下面的代碼:
UITextField * alertTextField = [alertDialog textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
和問題仍然存在,所以我不認爲這是。
我一直卡在這一段時間,還沒有想通了(因此後!),所以任何幫助將不勝感激。
由於
當不止一次滿足條件時,您想要什麼警報視圖行爲? – danh
對於表達式中的每個變量,我提示用戶需要將該值分配給該變量。然後,我將這些變量:值對添加到字典中,並將它們傳遞給模型以解決表達式。有沒有更好的方法從用戶那裏獲取一組值(在設計時你不知道表達式中有多少變量)?我會給你的建議一個去,回到我有多成功。歡呼聲 – cullener