質問のある sqlite データベースがあり、そこから N 個のランダムな質問を取得する関数を作成したいと考えています。n 回の反復で for ループを使用します。反復ごとに、繰り返されないランダムな ID を持つ質問を取得します。クラス「質問」のオブジェクトの変数に、各列の要素をコピーします。ここまでは、すべてが完璧です。NSLog を使用して、すべての関数を通じて質問を出力しました。最後のオブジェクトを NSMutablearray に追加しようとするまで、すべてのプロセスは正しいです。すべての位置が上書きされます。これは私のコードです:
-(NSMutableArray*)getNQuestions:(int)n
{
question *aQuestion=[[question alloc]init];
NSMutableArray *arrayOfChoosenQuestions=[[NSMutableArray alloc]initWithCapacity:n];
NSMutableIndexSet *choosenQuestionsIDs=[[NSMutableIndexSet alloc]init];
FMResultSet *rs;
int questionID;
for (int i=0; i<n; i++) {
questionID = (arc4random()%(NUMBER_OF_AVAILABLE_QUESTIONS-1))+1;
while ([choosenQuestionsIDs containsIndex:questionID]) {
questionID = (arc4random()%(NUMBER_OF_AVAILABLE_QUESTIONS-1))+1;
}
[choosenQuestionsIDs addIndex:questionID];
rs = [database executeQueryWithFormat:@"SELECT * FROM questions WHERE Questions.ID=%d", questionID];
if ([rs next] ) {
aQuestion.statement=[rs stringForColumn:@"Question"];
aQuestion.rightAnswer=[rs stringForColumn:@"Right_Answer"];
aQuestion.wrongAnswer1=[rs stringForColumn:@"Wrong_Answer_1"];
aQuestion.wrongAnswer2=[rs stringForColumn:@"Wrong_Answer_2"];
aQuestion.image=[rs stringForColumn:@"image"];
}
[arrayOfChoosenQuestions addObject:aQuestion];
}
return arrayOfChoosenQuestions;
}
これは何が起こるかの例です
最初の反復:
arrayOfChoosenQuestions=[質問1]
2回目の繰り返し
arrayOfChoosenQuestions=[質問2 質問2]
3回目の繰り返し
arrayOfChoosenQuestions=[質問3 質問3 質問3]
ご協力ありがとうございました