Objective C 2.0 и Быстрое выдающее исключения Перечисление

Полученная ошибка говорит о том, что tL2 пуст. Я думаю, вы хотели сравнить текст внутри textViews с пустой строкой, поэтому вы должны изменить свой код так, чтобы он выглядел следующим образом:

if(t5.getText().equals("")){
    tL2.add(t5);
}

Кроме того, лучше проверить, есть ли внутри tL2 элементы, прежде чем использовать первый элемент, поэтому я бы изменил последний фрагмент кода, чтобы он выглядел так:

if (tL2.size()>0)
    tL2.get(0).setText(a);
5
задан Coocoo4Cocoa 16 February 2009 в 20:22
поделиться

4 ответа

Хорошо способ решить его не состоит в том, чтобы видоизменить массив (например, добавить объект) при перечислении его :)

Проблема здесь состоит в том, что изменение массива путем добавления/удаления элементов могло заставить перечислимые величины становиться недопустимыми, следовательно почему это - проблема.

В Вашем случае самый легкий способ решить это исправляет ошибку в Вашем коде. Ваш код делает, "еще добавляют" пункт для каждого объекта в массиве, и я совершенно уверен, что это не то, что Вы хотите.

Попробуйте это;

bool found = false;
for (NSDictionary *tmp in aCollection)
{
   if ([[bar valueForKey:@"id"] isEqualToString:[tmp valueForKey:@"id"]])
   {
      found = true;
      break;
   }
}

if (!found)
{
 [aCollection addObject:bar];
}
12
ответ дан 18 December 2019 в 05:44
поделиться

Сделайте копию набора и выполните итерации через это. Затем можно выгрузить или добавить к исходному набору без проблем.

6
ответ дан 18 December 2019 в 05:44
поделиться

Строка

[aCollection addObject:bar]

Ваша проблема. Вы не можете изменить aCollection при перечислении его. Лучший подход должен был бы создать временный файл NSMutableArray, добавить bar к этому затем звоните [aCollection addObjectsFromArray:] с Вашим временным массивом.

Например:

NSMutableArray *foundObjects = [NSMutableArray array];
for (NSDictionary *aDictionary in aCollection) {
    if ([[bar objectForKey:@"id"] isEqual:[aDictionary objectForKey:@"id"]])
       break;

    [foundObjects addObject:bar];
}
[aCollection addObjectsFromArray:foundObjects];
6
ответ дан 18 December 2019 в 05:44
поделиться

От Objective C 2.0 Языка программирования Вы не можете изменить перечисляемый набор:

Перечисление “безопасно” — перечислитель имеет защиту мутации так, чтобы, при попытке изменить набор во время перечисления, исключение было повышено.

3
ответ дан 18 December 2019 в 05:44
поделиться