0

我有一个字典数组存储在带有键和字符串的 plist 中,它们是我的测验应用程序的问题和答案。我在屏幕上放了一个随机问题,但我想在屏幕上也以随机顺序放置问题的答案。我怎样才能做到这一点?

引用问题的方式如下:

-(void)displayQuestion: (NSDictionary *) Question 
{
    [questionLabel setText:[Question objectForKey:@"Question"]];
    [answer1 setText:[Question objectForKey:@"Answer1"]];
    [answer2 setText:[Question objectForKey:@"Answer2"]];
    [answer3 setText:[Question objectForKey:@"Answer3"]]; 
}

<dict>
    <key>category</key>
    <string>Elementary Pilot</string>
    <key>Question</key>
    <string>You are approaching a hang glider head-on and at approximately the same height. You should:</string>
    <key>Answer1</key>
    <string>Turn to your right?</string>
    <key>Answer2</key>
    <string>Turn to your left?</string>
    <key>Answer3</key>
    <string>Lose height rapidly?</string>
</dict>
4

2 回答 2

1

使用此答案中找到的类别What's the Best Way to Shuffle an NSMutableArray?

将您的答案放在 NSMutableArray 中,然后使用

NSMutableArray *answers = //get answers
[answers shuffle];
于 2012-06-20T19:34:11.580 回答
0

如果每个问题只有一个答案,那么您可以简单地保留两个数组,一个用于问题,一个用于答案。获取答案计数并使用以下方法获取该范围内的随机数

int randomNumber = arc4random()%[answers count];

然后您可以简单地在索引 = randomNumber 处获取答案数组中的对象。


好的,创建一个包含问题本身和 answerArray 的 questionObject。当您阅读 plist 时,您必须浏览每个问题的答案数组,然后您可以简单地按照之前的任何一个回答进行操作。


好的,让我们从头开始。您的 plist 是什么类型的对象?提示,提示,字典。到目前为止还好吗?要阅读 plist,您可以先找到它的路径:

// Path to the plist (in the application bundle)
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"NameOfPlist" ofType:@"plist"];

然后只需找到给定的字典,在这种情况下 plistInstance 是一个字典实例。

plistInstance = [[DataCacheManager dictionaryForPlistAtPath:plistPath] retain];

从那里您将能够访问该 plist 的直接键。在这种情况下,它可能是一个问题数组,所以你可以有这样的东西:

NSArray *questionsArray = [NSArray arrayWithArray:[plistInstance objectForKey:@"Questions"]];

在该数组中,您的问题对象应该有一个问题字符串和一个用于该问题答案的数组,依此类推。

于 2012-06-20T19:33:53.530 回答