Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 错误:使我的应用程序崩溃-[\uu NSArrayI objectAtIndex:]:索引3超出范围[0..2]';_Ios_Objective C_Iphone_Nsarray - Fatal编程技术网

Ios 错误:使我的应用程序崩溃-[\uu NSArrayI objectAtIndex:]:索引3超出范围[0..2]';

Ios 错误:使我的应用程序崩溃-[\uu NSArrayI objectAtIndex:]:索引3超出范围[0..2]';,ios,objective-c,iphone,nsarray,Ios,Objective C,Iphone,Nsarray,我已经创建了一个quizapp。但造成了一些问题,我的问题是myarray在我的应用程序崩溃后完成 我想在打开UIAlertView后查看myarray是否完成。怎么可能请帮忙。谢谢 // int _currentTitle; // _currentTitle=0; // NSArray* myarray; - (void)viewDidLoad { [super viewDidLoad]; myarray = [NSArray arrayWithObjects: @"Jill Valen

我已经创建了一个quizapp。但造成了一些问题,我的问题是myarray在我的应用程序崩溃后完成


我想在打开UIAlertView后查看myarray是否完成。怎么可能请帮忙。谢谢

// int _currentTitle;
// _currentTitle=0;
// NSArray* myarray;

 - (void)viewDidLoad {
[super viewDidLoad];

myarray = [NSArray arrayWithObjects: @"Jill Valentine", @"Peter Griffin", @"Meg Griffin", nil];
  }


- (IBAction)changeque:(id)sender {
[self changequestion];
}

-(void)changequestion
{
NSString *str = myarray[_currentTitle++];
questionLabel.text = str;


//        if (_currentTitle == myarray.count) { //reload myarray 
//            _currentTitle = 0;
//        }

}

myarray有3个元素,跨越形式

myarray[0]=“吉尔·瓦伦丁”

,

myarray[1]=“彼得·格里芬”

myarray[2]=“梅格·格里芬”


在Obj-C中,您使用nil值终止数组,因此myarray[3]不包含任何值。但是,当_currentTitle达到该值时,代码不会显示。

您需要某种条件来检查\u currentTitle是否等于[myarray count]。当满足此条件时,调用显示警报视图的方法

例如-

-(void)changequestion
{

     if (_currentTitle >= [myarray count]) {
          // call method to present alert view
          [self noMoreQuestions];     
     }
     else {
     NSString *str = myarray[_currentTitle];
     questionLabel.text = str;
     }
     _currentTitle++; // this is done last so question at index 0 happens
}

-(void)noMoreQuestions {
     // present alert to user
     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Alert" message:@"Your array count has finished" preferredStyle:UIAlertControllerStyleAlert];

     UIAlertAction *ok = [UIAlertAction  actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
                   }];

     UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
                   }];

     [alert addAction:ok];
     [alert addAction:cancel];
     [self presentViewController:alert animated:YES completion:nil];
     // remember to reset _currentTitle to 0 before starting next quiz
}
这样说:

-(void)changequestion
{
if (_currentTitle == myarray.count) { //reload myarray 
         _currentTitle = 0;
     }
NSString *str = myarray[_currentTitle++];
questionLabel.text = str;

}

您的问题不清楚,
myarray
仅可访问元素0到2。\u currentTitle=0将此行放入viewdidload()并选中changequestion\u currentTitle index不大于yourarray。count@vaibhav我想我的数组计数是结束后显示alertview,如何可能。请help@HimanshuMoradiya我输入了viewdidload(),但changequestion方法请解释一些代码。我想在打开alertview后完成myarray,而不是重复myarray@DivankKumawat-为什么这个答案没有用,如果你struck@Anbu.Karthik谢谢你给我宝贵的时间。:)我的问题是,我使用了你们的代码,但第二次调用changequestion方法并直接移动到最后一个对象。但是我想一个一个计数对象,最后打开alerviewI,建议在changequestion方法的开头记录_currentTitle的值。每次调用时,它应该输出0..1..2..3。确保myarray[_currentTitle]如上所述,并且没有像代码中那样递增。似乎_currentTitle正在其他地方递增。再次抱歉,我使用了您的代码并解决了我的问题,非常感谢:)