Предотвратить выбор определенных объектов в NSMutableArray? - PullRequest
0 голосов
/ 11 декабря 2011

Я в некотором роде здесь, так как я пытался сделать много вещей для достижения этой цели и потерпел неудачу.

Что я хочу сделать: У меня есть NSString в моем приложении, котороеявляется ответом на вопрос к раунду в викторине.Мои ответы хранятся в NSMutableArray.Эти ответы выбираются случайным образом. У меня есть 4 кнопки в моем приложении, которые являются вариантами (возможные ответы) для раунда.Я не хочу иметь несколько ответов!

Что я пробовал:

  1. Я пытался удалить ответ после сохранения в одномиз-за того, что его нельзя было выбрать снова, но это привело к сбою, поскольку я пытался удалить объект в массиве, используя быстрое перечисление (для цикла).
  2. Я пытался просто обнаружитьесли заголовок кнопки был равен ответу после установки правильного ответа для определенной кнопки, но это не сработало по какой-то странной причине (без сбоев).По-прежнему будет несколько кнопок с одним и тем же ответом

Что мне нужно помочь с: Как мне не дать ответу быть в нескольких кнопках, чтобы тест не отображалочевидный ответ?

Что мне делать вместо этого?

Спасибо!

Edit1 : Итак, я в значительной степени создал NSArray из моих четырех кнопок UIB.

Я помещаю ответ в случайную кнопку UIB следующим образом:

NSInteger chosen = (arc4random() % 4);
UIButton *randButton = (UIButton *)[buttonArray objectAtIndex:chosen];
[randButton setTitle:imageName forState:UIControlStateNormal];

Затем я называю другие кнопки примерно так, мои кнопки, у которых нет ответа, не имеют названия, поэтому я делаюэто:

- (void)titleButtons {
    for (UIButton *buttons in buttonArray) {
        if ([[buttons titleForState:UIControlStateNormal] == nil]) {
            UIButton *button = buttons;
            NSString *superheroString = (NSString*)[superheroArray objectAtIndex:(arc4random() % [superheroArray count])];
            [button setTitle:superheroString forState:UIControlStateNormal];
            [self checkTitles:button];
        }
    }

Тогда метод checkTitle выглядит следующим образом, это метод, в котором я пытаюсь убедиться, что 2 кнопки не имеют такой же ответ, как imageName (ответ):

- (void)checkTitles:(UIButton*)button {
    if ([[button titleForState:UIControlStateNormal] isEqualToString:imageName]) {
        //Duplicate Answer so re-title button
        NSString *newTitle = [superheroArray objectAtIndex:(arc4random() % [superheroArray count])];
        [button setTitle:newTitle forState:UIControlStateNormal];
        //Call same method again to see if new title is still same answer as pic to avoid same answers
        [self checkTitles:button];
    }
}
}

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Если у вас есть NSArray со всеми вашими ответами, и вы хотите 1 правильный ответ и 3 разных неправильных ответа, вы можете сделать следующее:

  1. Определить, для какой кнопки вы хотите получить правильный ответ,(рандомизировать его)
  2. Получить случайный ответ из вашего массива и сохранить индекс этого ответа во временном массиве.
  3. Получить другой случайный ответ и убедиться, что вы не выбираете ответ с помощьютот же индекс, что и у вас во временном массиве (и снова сохраните новый индекс во временном массиве)
0 голосов
/ 12 декабря 2011

Не сравнивайте строки, используя ==.Это сравнивает адреса указателей.Вместо этого используйте isEqualToString::

if (stringA == stringB)

Обычно не будет работать (для некоторых константных строк)

if ([stringA isEqualToString:stringB])

Всегда будет работать.

...