Что означает ошибка «нераспознанный селектор отправлен в экземпляр»? - PullRequest
0 голосов
/ 01 марта 2011

В моем приложении происходит сбой из-за следующей ошибки:

-[NSCFString count]: unrecognized selector sent to instance 0x612b060

Может кто-нибудь сказать мне, что это значит и как я могу найти строку в моем коде со ссылкой 0x612b060

Ответы [ 6 ]

5 голосов
/ 01 марта 2011

Вы вызываете метод count для объекта (вероятно, коллекции, например, массива, словаря или набора), который освобожден или еще не был инициализирован.

3 голосов
/ 01 марта 2011

Вы отправляете сообщение "count" для NSCFString, значит, вызываете метод "count" для типа данных NSString.

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

Назначение данных NSString для NSArray или (тип данных Array) и попытки подсчета.

2 голосов
/ 01 марта 2011

Скорее всего, это происходит потому, что у вас есть объект коллекции (например, NSArray, NSDictionary), который вы не сохраняете должным образом.

Попробуйте использовать NSZombies, чтобы найти объект, который был выпущен.

  1. Щелкните правой кнопкой мыши исполняемый файл в группе «Исполняемые файлы» в XCode. Выберите Get Info
  2. Выберите вкладку Аргументы.
  3. В Variables to be set in the environment создайте переменную с именем NSZombieEnabled и установите для нее значение YES. Не забудьте активировать его.
  4. Включите точки останова и запустите ваш код.
  5. отладчик укажет вам на объект, который был выпущен раньше.

После того, как вы закончили отладку этой проблемы, вы должны отключить NSZombies. NSZombies не освобождает память, просто помечает объекты как освобожденные.
Так что рано или поздно вы получите предупреждение о памяти.
Вы можете просто снять галочку перед ней, чтобы деактивировать NSZombies.

0 голосов
/ 20 июля 2016

Практический пример:

Иногда есть практическая разница, которую я пока не понимаю. valueForKey не работает в коде SOGo-3.1.4, пытающемся вызвать недоступный «метод» ASProtocolVersion для объекта context:

`EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance

, тогда как objectForKey работает (и это обычный способ запроса объекта context в другом месте кода).

См. https://github.com/inverse-inc/sogo/pull/217/files

0 голосов
/ 13 сентября 2011

Может, кому-то понадобится это: Когда у меня возникла такая проблема, я использовал: [ myarray retain]; после myarray = [NSArray arrayWithObjects: ...];, и это сработало.Я думаю, что это потому, что мой массив разрушает себя слишком рано.Но я не знаю, как теперь я могу выпустить этот объект?Просто [myarray autorelease]?Есть что-то противоположное, чтобы сохранить?

0 голосов
/ 01 марта 2011

Вы хотели назвать length в вашей строке?

...