Как этот код мог "показать правильный результат"?Он должен вызывать сбои каждую секунду (с предоставленными вами тестовыми данными) из-за исключительной ситуации, вызванной этим кодом:
// assume array has 10 objects
int r = arc4random() %[array count]; // r = 9
NSString *arrayData1 = [array objectAtIndex:r]; // index 9, everything ok
NSString *arrayData2 = [array objectAtIndex:r+1]; // index 9 + 1 = 10. exception
На вашем месте я бы радикально изменил быкод и структура данных.Гораздо разумнее использовать NSArray для вашего вопроса и NSDictionary для каждого отдельного вопроса.Если ключи в словаре называются q1, q2, q3, q4 и т. Д., Нет смысла использовать NSDictionary.
Тогда вы могли бы использовать что-то подобное, что гораздо проще для понимания и намногоочиститель.
NSString *pathToQuestions = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"];
NSMutableArray *questions = [[[NSMutableArray alloc] initWithContentsOfFile:pathToQuestions] autorelease];
int questionIndex = arc4random() %[questions count];
NSDictionary *question = [questions objectAtIndex:questionIndex];
NSString *answerStr = [question objectForKey:@"answer"];
NSString *questionStr = [question objectForKey:@"question"];