2016-10-26 2 views
-1

Ich habe eine QuizApp erstellen. Aber erstellen Sie ein Problem, mein Problem ist, dass Myarray nach dem Absturz meiner App abgeschlossen ist.Fehler: Absturz meiner App - [__ NSArrayI objectAtIndex:]: Index 3 über Grenzen [0 .. 2] '

Ich möchte nach abgeschlossener UIAlertView Myarray abgeschlossen werden. Wie es möglich ist, bitte helfen Sie. Thankyou

// 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; 
//  } 

} 
+0

Ihre ques nicht klar ist, 'myarray' ist nur Elemente 0 bis 2 – vaibhav

+0

_currentTitle = 0 setzen Sie diese Zeile in viewDidLoad() und überprüfen changequestion _currentTitle Index nicht größer als yourarray.count –

+1

@vaibhav ich möchte myarray zählen ist Ende nach Show alertview, wie es möglich ist. Bitte helfen –

Antwort

1

Sie brauchen eine Art von bedingtem zu überprüfen, ob _currentTitle zu [myarray count] gleich ist. Wenn diese Bedingung erfüllt ist, rufen Sie eine Methode auf, die eine Alert-Ansicht darstellt.

Beispiel könnte sein -

-(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 
} 
+0

Ich benutzte Ihren Code, aber das zweite Mal rufen Sie changequestion Methode und direkte Bewegung zum letzten Objekt. aber ich möchte einen Countdown-Objekte und schließlich öffnen alerview –

+0

Ich empfehle, den Wert von _currentTitle am Anfang der changequestion-Methode zu protokollieren. Es sollte 0..1..2..3 ausgeben, wie es jedes Mal aufgerufen wird. Stellen Sie sicher, dass myarray [_currentTitle] wie oben ist und nicht wie in Ihrem Code erhöht. Es scheint, als würde _currentTitle woanders erhöht. – Bamsworld

+0

Entschuldigung, ich benutze Ihren Code und löste mein Problem, vielen Dank :) –

0

myarray hat 3 Elemente, Spanning Form

myarray [0] = "Jill Valentine"

,

myarray [1] = "Peter Griffin"

und

myarray [2] = "Meg Griffin"

in obj-C beenden Sie Arrays mit einem Null-Wert, so myarray [3] keinen Wert enthalten. Ihr Code wird jedoch nicht angezeigt, wenn _currentTitle diesen Wert erreicht.

1

setzen diese:

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

} 
+0

gut, kann ein paar Kommentare auch hinzufügen –

+0

Ich möchte nach myarray ist abgeschlossen nach offenen alertview keine Wiederholung myarray –

+0

@ Anbu.Karthik bitte lösen Sie mein Problem –

Verwandte Themen