我是iphone编程新手。我一直在努力解决这个问题,并尝试了很多不同的在线解决方案,但无法获得理想的结果。
我想从随机数组或字典中显示2个字符串(我不确定什么是最好用的)它会显示一个随机问题和配对的答案。这是我到目前为止所拥有的:
<dict>
<key>q2</key>
<array>
<string>answer2</string>
<string>question2</string>
</array>
<key>q1</key>
<array>
<string>answer1</string>
<string>question1</string>
</array>
的.m:
NSString *fileContents = [[NSBundle mainBundle] pathForResource:@"questions" ofType:@"plist"];
NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:fileContents];
NSMutableArray *array = [plistDict objectForKey:@"q1"];
srandom(time(NULL));
int r = arc4random() %[array count];
NSString *arrayData1 = [array objectAtIndex:r];
NSString *arrayData2 = [array objectAtIndex:r+1];
label1.text = arrayData1;
label2.text = arrayData2;
这显示正确的结果。但显然它只能从'q1'阵列中选出它。我希望能够从任何阵列中获取它。任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
由于您使用的是NSMutableArray *array = [plistDict objectForKey:@"q1"];
,因此只会使用q1中的数组。您必须通过随机选择字典的键来随机获取数组。
<强>更新强>
例如,如果您说7个问题数组,名为q1,q2,q3,q4,q5,q6,q7。你必须从中随机选择一个数组。所以你可以使用
int q = arc4random() %[[plistDict allKeys] count];
NSMutableArray *randomQuestionarray = [[plistDict objectForKey:[NSString stringWithFormat:@"q%d",q]];
这将为您提供问题的随机数组
答案 1 :(得分:0)
这段代码怎么能“显示正确的结果”?它应该每秒都会崩溃(使用您提供的测试数据),因为此代码导致了一个超出范围的异常:
// 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"];
答案 2 :(得分:0)
@ 7KV7 是对的,您需要在运行时随机格式化密钥。
对于andomly格式化的键,您需要键的起始文本,在您的情况下,它是 q 和键数,
例如,假设你有50个密钥,你的密钥值必须是这样的 q0,q1,q2,----- q49。#include <stdlib.h>
...
...
NSInteger myRandomInt = arc4random() % numberOfKeys ;
NSString myRandomKey = [[NSSting alloc] initWithFormat:@"q%d", myRandomInt];
NSMutableArray *array = [plistDict objectForKey:myRandomKey];