从.plist中的随机字典中获取2个字符串

时间:2011-03-21 11:15:11

标签: iphone arrays random dictionary plist

我是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'阵列中选出它。我希望能够从任何阵列中获取它。任何帮助将不胜感激。感谢。

3 个答案:

答案 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];