2011-08-02 12 views
0

私はムービーごとに26の映画と3つの質問でデータベースを持っています。NSMutablearrayのNSMutablearray

私の行ったことは、自分のプログラムがランダムにデータベースから質問を選択し、それが画面に表示されていることです。私が問題を抱えているのは、この質問を記録して、それが再び選択されないようにすることです。

は、これまでのところ、私はこれで遊んでされています:

usedMovie_id = [[NSMutableArray alloc] initWithCapacity:26]; 
    usedQuestion_id = [[NSMutableArray alloc] initWithCapacity:4]; 

    for (NSInteger i = 0; i < 26; ++i) 
    { 
     [usedMovie_id addObject:[NSNull null]]; 
    } 
    for (NSInteger i = 0; i < 4; ++i) 
    { 
     [usedQuestion_id addObject:[NSNull null]]; 
    } 
    while (i < 10) { 
     int ii = [self genRandomNumberForMovies]; 
     int jj = [self genRandomNumberForQuestions:25]; 
     NSLog(@"ii %d, jj %d", ii,jj); 
     [usedQuestion_id replaceObjectAtIndex:jj withObject:[NSNumber numberWithInt:jj]]; 
     [usedMovie_id replaceObjectAtIndex:ii withObject:usedQuestion_id]; 
     i++; 
     //NSLog(@"movie_id array %@", usedMovie_id); 

    } 

私の問題は、アレイusedQuestion_idがusedMovie_idにおけるインデックスのいずれかで異なっていないということです、それらはすべて同じです。 usedQuery_idが1であり、usedMovie_idが最初のループで13である場合、usedQuery_idは1であり、usedMovie_idは2番目のループでは10です。 usedQuestion_idは、インデックス13のusedMovie_idで(最初のループから)1,3に更新されます。

また、どの質問に正しく答えられたのかを記録する必要があるため、正しく回答されていない質問のみが表示されます。

それぞれ独自のデータを持つ26個のnsmutablearraysを作成する必要はありません。

私はnsdictionaryやデータベースが必要かもしれないと思っています。 また、質問ごとに答えが出された後にランダム化ではなく、最初からランダム化して各質問を繰り返します。

答えて

1

映画や質問のリストが変化しない場合は、の.plistファイル内NSDictionaryのにそれらを入れて、ランダムにそこから引き出します。次に、変更可能な配列に質問を格納し、重複しているかどうかを調べることができます。しかし、よりランダムなムービーやすべての重複している質問については、余分な処理を行うリスクがあります。

バットから質問のリスト全体を無作為化し、順次表示することをお勧めします。また、配列のインデックスを照合して正しい/間違った質問にすることができます。

CoreDataまたはSQLite dbを使用してすべてを保存すると、おそらく最も効率的なオプションになりますが、経験が豊富でない場合やオーバーヘッドを必要としない場合は、 .plistファイルと配列。

+0

ありがとう、私はあなたの質問の私のリストについて言いましたが、それを変えていないと考えていました。 – bigubosu

0

データベースが役立つかもしれない領域に入っているようです。特に、これらの4つの映画が40の映画と何千もの質問に変わった場合は特にそうです。試してみたいと思えば、コアデータはここで多く役立ちます。

また、データベースから動的に取得できるので、これらの値はすべてハードコードする必要がありません。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

+0

提案に感謝します。私は現時点でCoreDataを避けたいと思います。代わりに私はデータベースで少し経験があるので、私はむしろそれを使用したいと思います。私はかなり混乱してCoreDataを試してみました。 – bigubosu

+0

問題はありませんでした。私が最初に使い始めたときは、とても混乱しました。あなたはsqliteを使うことができます。あるいは、いくつかの辞書、配列、およびplistsで創造的であると言ったように。それはあなた次第です。 – Kaiser

0

これは私の立場にあった他の人のためのものです。

私がしたことは、外出先でのランダム化という考えを破棄したことでした。代わりに、私は配列を作成し、配列の中に問題のリストがあるので、配列を配置してから、配列に配列を入れて配列に入れます。私はそれを使ってデータベースにリンクし、質問を描くことができます。

これは質問を繰り返す問題を解決します。

* rowidsは特定の質問の場所です。質問をどのように編成したかに応じて、自分のプライマリキーを作成する必要があります。しかし私はROWIDを使うことができることを知りました。私がmovie_idとquestion_idを使用する必要性を排除します。

**シャッフルするfisher-yatesアルゴリズムを参照してください。 stackoverflowには、コードで回答した例もあります。