2012-03-09 3 views
1

Использование ARC ...Быстрое перечисление на NSArray строковых литералов

NSArray *array = [NSArray arrayWithObjects:@"dog", @"cat", @"mouse", nil]; 

for(NSString *animal in array) { 
    NSLog(@"animal = %@", animal); 
} 

Урожайность индекс из ошибок границ.

*** - [__ NSArrayM objectAtIndex]: индекс 0 за пределы для пустого массива

Что балбес ошибка я сделал?

+1

Я проверил ваш код, и он работает так, как ожидалось. Итак, это ваш фактический код? Или вы инициализируете массив в одном месте в своем коде и проецируете его в другое место? – sch

+0

Одна из возможностей заключается в том, что у вас есть задание «array» и использование его в разных местах. Таким образом, «массив» концептуально вышел из сферы действия и был GCed, прежде чем вы попытались ссылаться на него. Я еще недостаточно знаком с ARC, чтобы узнать, в каких сценариях это может произойти, но я уверен, что есть куча. –

ответ

1

Код, который вы показали в порядке. Я просто запускал его под ARC, и он завершился успешно. Вы уверены, что ошибка для этого кода, а не другая часть вашего кода?

На ум приходит мысль: переменная 'array' довольно универсальна. Это мешает другим локальным/переменным экземпляра? Не имеет значения, находится ли код рядом друг с другом, но если вы объявили его в одном месте и выполняете цикл for в другом, вы можете не выполнять тот же «массив», как вы думаете. Изолируйте этот код в другом классе/методе/независимо и посмотрите, как он работает.

Другая мысль: Fast Enumeration не будет перечислять массивы нулевой длины (сначала проверяет). Вот почему я думаю, что вы ошибаетесь в ошибке за неправильную строку кода.

+0

Конечно, это был не мой производственный код ... Я перевернул его до примера выше, потому что я думал, что проблема связана с строковыми литералами. Фактическая проблема была в цикле for-in, я вызывал метод, ожидающий массив как аргумент, а не строку. Таким образом, ошибка была голова. (Нужно найти еще кофе!) – edelaney05

+0

Да, я иногда это делаю. Разделите код вниз, а затем добавьте обратно в кусок по частям, пока я не получу ошибку. Кажется, хорошо работает. –