【发布时间】:2013-04-26 09:42:58
【问题描述】:
我正在使用UIAlertView,但收到以下错误消息:
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“textFieldIndex (0) 超出了文本字段数组的范围”
但是我的UIAlertView 中没有textFields,而且我从来没有在某个地方访问过它们...
这是我的代码:
alertNewVersion = [[UIAlertView alloc] initWithTitle: @"Update"
message: @"There is a new version"
delegate: self
cancelButtonTitle:@"OK"
otherButtonTitles:@"Cancel",nil];
[alertNewVersion setAlertViewStyle:UIAlertViewStyleDefault];
alertNewVersion.tag = 1;
[alertNewVersion show];
但是,当我将“delegate:self”更改为“delegate:nil”时,它不会因错误而崩溃,但我的委托函数当然不起作用......知道问题是怎么回事吗?
编辑:
第二个 UIAlertView:
- (IBAction)startPushed:(id)sender {
message = [[UIAlertView alloc] initWithTitle:@"test."
message:nil
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"OK", nil];
[message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[[message textFieldAtIndex:1] setSecureTextEntry:NO];
[[message textFieldAtIndex:0] setPlaceholder:@"xx"];
[[message textFieldAtIndex:1] setPlaceholder:@"xxx"];
message.tag = 2;
[message show];
}
委托方法:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(alertView.tag == 1){ // alertNewVersion
if (buttonIndex == 0) { //button "OK" clicked
NSLog(@"test");
}
}
if(alertView.tag == 2){ // Message
if (buttonIndex == 0) { //button "OK" clicked
NSString *Name = [[message textFieldAtIndex:0] text];
[[NSUserDefaults standardUserDefaults] setObject:Name forKey:@"xx"];
NSString *Class = [[message textFieldAtIndex:1] text];
[[NSUserDefaults standardUserDefaults] setObject:Class forKey:@"xxx"];
}
}
}
【问题讨论】:
-
嗯,很明显,问题出在你的委托函数上。你为什么不展示你在那里做什么?我打赌你正在使用 textFieldWithIndex
-
请贴出应用崩溃的代码...
-
我认为您在同一个课程中使用了多个警报视图,对吧??
-
请贴出alertView委托方法的clickedButtonAtIndex方法...
-
在抛出异常时添加断点。这应该会为您提供崩溃的确切位置。
标签: iphone ios objective-c xcode uialertview