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

この回答にあるカテゴリを使用してくださいNSMutableArrayをシャッフルするための最良の方法は何ですか?

回答をNSMutableArrayに入れてから、次のように回答をシャッフルします。

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

各質問に回答が1つしかない場合は、質問用と回答用の2つの配列を保持するだけで済みます。回答の数を取得し、を使用してその範囲内の乱数を取得します

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

次に、index=randomNumberのanswers配列でオブジェクトを取得できます。


OK、質問自体と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 に答える