私のチームと私はクイズ アプリに取り組んでおり、1 つのビューがあり、ラベルとボタンのテキストをリロードするだけです。クイズを開始すると、データベースから質問と回答をロードする 2 つのループがあります。これらのループでは、.h ファイルで宣言されているオブジェクトを初期化します。obj = [[class alloc] initwith:stuff]; 2 つのループがあるメソッドを 6 回目に呼び出すまでは、完全に機能します。最初のループでクラッシュすることもあれば、2 番目のループでクラッシュすることもあります。ここで奇妙な点は、「もう一度再生」ボタンでメソッドを 2 回呼び出すと、3 回目で既にクラッシュすることです (6 回呼び出されたメソッド = クラッシュ)。それで。プロジェクトのクリーンアップを試み、iPad とシミュレーターで実行しました。無効。エラーメッセージは、配列が
現時点ではコードニペットを提供することはできませんが、最も簡単な方法は、ユーザーが「もう一度再生」ボタンを押したときにアプリをリセットすることです。これを行う簡単な方法はありますか?アプリを閉じて、スプラッシュスクリーンで再度開くだけでも問題ありません。
今すぐ提案できない場合は、明日コードニペットを追加します
前もって感謝します
編集: SIGABRT これはエラー メッセージです: SoccerQuiz[1563:f803] * キャッチされない例外 'NSRangeException' が原因でアプリを終了しています。 : (0x159e022 0x172fcd6 0x158ad88 0x4719 0x3455 0x159fe99 0xe214e 0xe20e6 0x188ade 0x188fa7 0x188266 0x1073c0 0x1075e6 0xeddc4 0xe1634 0x1488ef5 0x1572195 0x14d6ff2 0x14d58da 0x14d4d84 0x14d4c9b 0x14877d8 0x148788a 0xdf626 0x20ed 0x2055) terminate called throwing an exception(lldb)
私のコード:
-(NSMutableArray*) readFromDatabase{
//if modus is true 20 questions will be loaded(untested). we set mds to 10 for now which works for the first 5 times and then crashes the 6th time
int mds = 0;
if (modus)
mds = 20;
else mds = 10;
bool loop = true;
//a_data is the array in which the data object is. it is filled with the questions and answeres
NSMutableArray * a_data = [[NSMutableArray alloc] init];
//check_id is the array in which the question ids from the database are saved
NSMutableArray * check_id = [[NSMutableArray alloc] init];
//ant is the array in which the 4 possible answers are saved.
NSMutableArray *ant = [[NSMutableArray alloc] init];
//in id_frage the id of the question is saved and in frage the question itself
NSString *id_frage = [[NSString alloc] init];
NSString *frage = [[NSString alloc] init];
//in sql_id the statement for the question is saved
NSString *sql_id = [[NSString alloc] initWithFormat:@"select id from QQUESTION where level = %@ order by random() limit 1", difficulty];
//in the method sqlquery we get data from the database
id_frage = [[self sqlquery: sql_id with:@"Q"] objectAtIndex:0];
[check_id addObject:id_frage];
NSLog(@"1");
//we use these loops to read unique question ids from the database, as you can see random questions are loaded from the database (sql_id statement)
for (int z = 0; z < mds; z++)
{
while (loop)
{
for (int y = 0; y <= check_id.count; y++)
{
//this loop checks if the question id is already in check_id
if ([[check_id objectAtIndex:y] isEqualToString:id_frage])
{
id_frage = [[self sqlquery: sql_id with:@"Q"] objectAtIndex:0];
break;
}
else {
//if the id doesnt already exit, it will be added to the check_id array
if (y == check_id.count-1)
{
[check_id addObject:id_frage];
loop = false;
break;
}
}
}
}
loop = true;
id_frage = [[self sqlquery: sql_id with:@"Q"] objectAtIndex:0];
}
NSLog(@"2");
//this loops loads the questions and answers that fit to the question ids
for (int x = 0; x < mds; x++)
{
//sql_q statement for the questions
NSString *sql_q = [[NSString alloc] initWithFormat:@"select TEXT from QQUESTIONTEXT where ID_QUESTION = '%@' and LANGUAGE = '%@'", [check_id objectAtIndex:x], language];
frage = [[self sqlquery:sql_q with:@"Q" ]objectAtIndex:0];
//sql_a statement for the answers
NSString *sql_a = [[NSString alloc] initWithFormat:@"select answer.correct, answertext.text from QANSWER as answer, QANSWERTEXT as answertext where answer.ID_QUESTION='%@' and answer.ID = answertext.ID_ANSWER and answertext.LANGUAGE = '%@'", [check_id objectAtIndex:x], language];
ant = [self sqlquery: sql_a with:@"A"];
//this loop sets the right answer at the first position of the array
for(int a = 0; a<ant.count-1; a++)
{
if([[ant objectAtIndex:a] isEqualToString:@"1"])
{
a++;
NSString *h = [[NSString alloc]initWithFormat:[ant objectAtIndex:1]];
[ant replaceObjectAtIndex:1 withObject:[ant objectAtIndex:a]];
[ant replaceObjectAtIndex:a withObject:h];
a--;
break;
}
}
//this data object 'd' is filled with a question and 4 answers and 10 or 20 will be added to a_data which will be returned
d = [[data alloc] initFrage:frage mitAntwort1:[ant objectAtIndex:1] Antwort2:[ant objectAtIndex:3] Antwort3:[ant objectAtIndex:5] Antwort4:[ant objectAtIndex:7]];
[a_data addObject:d];
}
NSLog(@"3");
return a_data;
}