NSMutablearray в NSMutablearray - PullRequest
       2

NSMutablearray в NSMutablearray

0 голосов
/ 02 августа 2011

У меня есть база данных с 26 фильмами и 3 вопросами на фильм.

Что я сделал, так это то, что моя программа случайным образом выбирает вопрос из базы данных, и он отображается на экране. У меня проблемы с записью этого вопроса, чтобы он не был выбран снова.

Пока я играл с этим:

    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, они все одинаковые. Если usedQuestion_id имеет 1, а usedMovie_id - 13 в первом цикле, а затем usedQuestion_id - 1, 3, а usedMovie_id - 10 во втором цикле. UsedQuestion_id обновляется до 1, 3 для usedMovie_id с индексом 13 (из первого цикла).

Также мне нужно записать, на какой вопрос был дан правильный и неправильный ответ, поэтому я показываю только те вопросы, на которые не был дан правильный ответ.

Я не хочу создавать 26 nsmutablearrays каждый со своими данными.

Я думаю, что мне может понадобиться база данных или даже база данных .. Также я мог рандомизировать в начале и проходить по каждому вопросу вместо того, чтобы рандомизировать после того, как на каждый вопрос был дан ответ.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Если список фильмов и вопросов никогда не меняется, поместите их в NSDictionary внутри файла .plist и начертите случайное рисование оттуда.Затем вы можете сохранить вопрос в непостоянном массиве и проверить его на наличие дубликатов.Но вы рискуете подвергнуться дополнительной обработке, возвращаясь к большему количеству случайных фильмов и вопросов, которые являются дубликатами.

Мне нравится ваша идея рандомизировать весь список вопросов сразу, а затем отображать их последовательно.Это также даст вам наилучшую возможность сопоставить индекс массива для исправления / неправильных вопросов.

В конце концов, использование CoreData или SQLite db для хранения всего, вероятно, будет вашим наиболее эффективным вариантом,но если вы не обладаете таким опытом или не хотите накладных расходов, вы можете проявить изобретательность с помощью файла .plist и массивов.

0 голосов
/ 04 августа 2011

Это для всех, кто был на моем месте.

Что я сделал, так это отменил идею рандомизации на ходу. Вместо этого я бы создал массив, поместил rowids * (потому что мой список вопросов находится в базе данных) в массив, затем перетасовал ** список rowids и поместил этот список в массив. Который я могу затем использовать для ссылки на базу данных и нарисовать вопрос.

Это решает проблему повторения вопросов.

* rowids - это место, где находится конкретный вопрос. вам, возможно, придется создавать свои собственные первичные ключи и прочее в зависимости от того, как вы организовали свои вопросы. но я узнал, что могу использовать rowids. Избавляет меня от необходимости использовать movie_id, а затем question_id.

** Просмотрите алгоритм Фишера-Йейтса, чтобы перемешать. Есть также примеры на стеке потока, на которые люди ответили кодом.

0 голосов
/ 02 августа 2011

Похоже, вы попадаете в область, где база данных может быть полезной, особенно если в какой-то момент эти 4 фильма превратятся в 40 фильмов и тысячи вопросов.Если вы хотите попробовать, Core Data может очень помочь здесь.

Это также поможет избежать необходимости жестко кодировать все эти значения, поскольку вы можете динамически извлекать их из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...