2012-07-31 2 views
0

Так я получаю сообщение об ошибкеIOS сообщение об ошибке: Причина: '- [__ длина NSArrayM]:

reason: '-[__NSArrayM length]: 

, когда эта линия выполнена в моей программе

if (indexInTour == [tourArray count]-1) 

Что я не' t понимать, поскольку оба значения определены во время выполнения.

Этот код работает нормально, когда контроллер просмотра выталкивается с одного контроллера вида, но сбрасывается при нажатии на другой.

Кроме того, я запутался, почему

NSLog(@"%i", [tourArray count]); 

работает отлично, в то время как

if (indexInTour == [tourArray count]-1) // Crashes here 

нет.

Некоторая дополнительная информация:

Код:

NSLog(@"%i", [tourArray count]); 
NSLog(@"%i", indexInTour); 
NSLog(@"%@", NSStringFromClass([tourArray class])); 
// NSLog(@"%@", tourArray); 

if (indexInTour == [tourArray count]-1) // Crashes here 

Выход:

2012-07-31 09:46:10.268 XXX[13374:11603] 7 
2012-07-31 09:46:10.269 XXX[13374:11603] 2 
2012-07-31 09:46:10.270 XXX[13374:11603] __NSArrayM 

Полное сообщение об ошибке:

-[__NSArrayM length]: unrecognized selector sent to instance 0x7a97f60 
2012-07-31 09:50:26.696 XXX[13456:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM length]: unrecognized selector sent to instance 0x7a97f60' 
+0

Перед этой строкой добавьте этот код: NSLog (@ "% @", NSStringFromClass ([tourArray class])); –

+0

Кажется, что класс экземпляра: __NSArrayM – ratsimihah

+0

Попробуйте запустить сам массив NSLog (@ "% @", tourArray)); Я собираюсь предположить, что какой-то объект в нем был освобожден или что-то еще, поэтому массив поврежден. Мое лучшее предположение. –

ответ

4

Похоже, вопрос открепление. Убедитесь, что ваше свойство объявлено либо strong, либо retain.

EDIT:

Основываясь на комментариях ниже, оказывается, что ваш tourArray содержит NSMutableArray вместо NSString.

+0

Моя собственность объявлена ​​как @property (сильный, неатомный) NSArray * tourArray; Можете ли вы подумать о чем-либо, что я должен или не должен делать при использовании ARC, что может вызвать эту ошибку? – ratsimihah

+1

Включить break on exception и проверить, где вызывается селектор 'length' от –

+0

. Получается, что здесь вызывается длина: [directionTextLabel setText: [directionArray objectAtIndex: indexInTour]]; – ratsimihah

Смежные вопросы