2009-10-01 3 views
0

Сейчас я работаю над проектом iPhone и я использую экземпляры класса NSMutableArray и внезапно, без причины, во время казни NSMutableArray раскладывающейся в UICachedDeviceRGBColor становится непригодным для использования.NSMutableArray превращается в UICachedDeviceRGBColor во время выполнения

Я не знаю, что делать, тот же объект работал нормально до сегодняшнего дня.

Я получил эту ошибку:

*** -[UICachedDeviceRGBColor count]: unrecognized selector sent to instance 0x4b3e440 
+0

Звучит как проблема с распределением памяти. Вы должны показать код. Это невозможно для автоматического «преобразования» в какой-либо другой объект. Как выглядит ваш код для инициализации NSMutableArray? –

+0

привет Мэтт! позвольте мне добавить вам код: NSMutableArray * currentIngsGroup = [[NSMutableArray alloc] init]; currentIngsGroup = (NSMutableArray *) [allIngredientGroups objectAtIndex: 0]; NSLog (@ "accesing array% d", [currentIngsGroup count]); // здесь он сбой, потому что обнаруживает currentIngsGroup как объект UICachedDeviceRGBColor :( –

+0

Если вы разместите свой код в своем вопросе, вы можете воспользоваться автоформатированием и сделать его более читаемым. – willc2

ответ

4

В следующий раз, вставить код в ваш вопрос, без комментариев. Здесь красиво отформатирован:

NSMutableArray *currentIngsGroup = [[NSMutableArray alloc] init]; 
currentIngsGroup = (NSMutableArray *)[allIngredientGroups objectAtIndex:0]; 
NSLog(@"accesing array %d", [currentIngsGroup count]); 

Обычно, я бы сказал, что этот симптом вы описали означает, что вы более-рилизинг-то. Код, однако, демонстрирует фундаментальное отсутствие понимания Objective-C. Я бы предложил прочитать документ Introduction to Objective-C.

В частности, вы выделяете экземпляр NSMutableArray в первой строке кода. Вторая строка, однако, немедленно перезаписывает ссылку на изменяемый массив ссылкой на любой объект, находящийся в индексе 0 массива allIngredientGroups.

(NSMutableArray *) совершенно не нужно. Он не будет заставлять какой-либо объект в массиве быть изменяемым массивом, и поскольку -objectAtIndex: возвращает (id), приведение не требуется.

BTW: Массивы, выделенные на первой линии, просачиваются. Опять же, прочитайте введение в цель-c, чтобы понять, почему.

+0

Спасибо bbum! Извините, потому что я не поставил свой код в нужное место, и я не объяснил, что строки кода были взяты из всего основного контроллера (они не вместе) Большое спасибо за вашу помощь. Я не смог заставить приложение работать снова, благодаря Богу, у меня была рабочая версия в SVN. Еще раз спасибо Alejandra :) –

+0

С удовольствием помогаем. Серьезно - идите читать руководство. Это хороший материал! – bbum

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

  • Нет связанных вопросов^_^