Нераспознанный селектор отправлен на экземпляр - по методу сеттера - PullRequest
0 голосов
/ 10 ноября 2009

Каждый раз, когда я пытаюсь установить значение любой переменной в моем объекте модели, я получаю сообщение об ошибке «Нераспознанный селектор отправлен в экземпляр», и приложение вылетает. Ивари были синтезированы, и они не только для чтения. Я проверил, чтобы увидеть, что установленные значения имеют правильный тип.

Я не уверен, связано ли это с каким-то соединением в IB, которое я проверил повторно.

Один дополнительный бит информации: я начал разрабатывать более раннюю версию Xcode и тот же фрагмент кода, который использовался для этой версии.

Вот точное сообщение об ошибке:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString setDistance:]: unrecognized selector sent to instance 0x380ce50'
2009-11-10 15:10:58.113 CabMeter[7432:207] Stack: (
    29303899,
    2457931593,
    29685819,
    29255286,
    29107906,
    11415,
    3140002,
    3149770,
    3199319,
    3236748,
    3170686,
    3230561,
    3179329,
    12452,
    3918761,
    3933474,
    4979284,
    4987529,
    3990121,
    2838067,
    2746396,
    2773173,
    37400273,
    29088640,
    29084744,
    37394317,
    37394514,
    2777091,
    9208,
    9062
)

Ответы [ 2 ]

7 голосов
/ 10 ноября 2009

Ивари были синтезированы, и они не только для чтения.

Я думаю, вы путаете переменные экземпляра со свойствами. Свойства - это то, что вы обычно синтезируете и / или делаете доступными только для чтения, и они обычно, но не обязательно, поддерживаются переменными экземпляра.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString setDistance:]: unrecognized selector sent to instance 0x380ce50'

Вот почему вы должны прочитать сообщение об ошибке.

Вы не отправляете ваше сообщение setDistance: на объект вашей модели - вы отправляете его в строку. Скорее всего, вы не сохранили объект модели так, как должны, и вскоре после этого была выделена строка с тем же адресом.

Просмотрите правила управления памятью и посмотрите, где вы не следуете им. Если все ваши свойства установлены правильно, убедитесь, что вы на самом деле используете их: Распространенной ошибкой является назначение непосредственно ivar:

myModel = [[[MyModel alloc] init] autorelease]

вместо прохождения через свойство:

self.myModel = [[[MyModel alloc] init] autorelease]
или
[self setMyModel:[[[MyModel alloc] init] autorelease]]

0 голосов
/ 10 ноября 2009

«Нераспознанный селектор, отправленный экземпляру» звучит так, как будто у вас есть делегат, определяет селектор для метода, который не существует.

Есть ли у вас @selector(methodName) где-нибудь в вашем коде?

В трассировке стека, каков последний код, который вызывается перед выдачей исключения?

Если это метод setter, можем ли мы увидеть, как вы объявляете переменную экземпляра и как вы ее синтезируете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...