Cocoa touch - проблема с подключением кнопки-viewController - PullRequest
0 голосов
/ 13 октября 2009

Я очень плохо знаком с какао, и застрял в проблеме, которая, похоже, не имеет решения Google. Я добавил представление в свое приложение, и на этом представлении есть кнопка. Когда кнопка нажата, я хочу, чтобы обратный вызов выполнил операцию.

Моя проблема в том, что обратный вызов не вызывается. Я создал представление в Интерфейсном Разработчике, соединил внутреннее соединение для подкраски с моим классом Owner (в данном случае это класс viewController) и выбрал соответствующий обратный вызов.

Я получаю следующую ошибку: 2009-10-13 17: 13: 51.708 MyApp [7467: 20b] * Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* - [NSCFSet contactsButtonPressed:]: нераспознанный селектор, отправленный экземпляру 0x4c27330 «

Насколько я понимаю, это говорит о том, что соединение между контактами ButtonPressed и MyViewController является неправильным. Я не уверен, откуда берется объект NSCFSet.

У кого-нибудь есть идеи?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 октября 2009

Я получаю следующую ошибку:

2009-10-13 17:13:51.708 MyApp[7467:20b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSCFSet contactsButtonPressed:]: unrecognized selector sent to instance 0x4c27330'

Вы, вероятно, недооцениваете тот объект вашего контроллера, который должен получить это сообщение действия. Добавьте вызов NSLog в метод контроллера dealloc; вы, вероятно, обнаружите, что он заблокирован, прежде чем вы ожидаете.

Тогда возникает вопрос: кто должен владеть этим контроллером? Затем убедитесь, что все владельцы сохранили его.

Если вы держите контроллер в свойстве, убедитесь, что вы действительно используете это свойство. Распространенной ошибкой является запись myController = theController, которая обходит свойство и присваивает непосредственно переменной экземпляра вместо self.myController = theController (синтаксис доступа к свойству, неявное сообщение о доступе) или [self setMyController:theController] (явный синтаксис сообщения).

Кроме того, если вы реализовали собственные средства доступа для свойства (особенно setMyController:), убедитесь, что ваш установщик освобождает старый объект и сохраняет новый. Конечно, это предполагает, что у вас есть причина для реализации вашего собственного средства доступа; обычно вам просто нужно @synthesize свойство и позволить компилятору написать средство доступа для вас.

0 голосов
/ 13 октября 2009

где-то в вашем коде у вас есть строка, которая выглядит так:

[button addTarget:self action:@selector(contactsButtonPressed:)];

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

- (void)contactsButtonPressed:(UIButton *)sender {
  ...
}

Если вы посмотрите на ошибку, похоже, что вы отправляете сообщение объекту NSCFSet вместо контроллера. Я бы проверил, что вы устанавливаете делегат на self или контроллер.

0 голосов
/ 13 октября 2009

Я тоже новичок в какао,

Может быть, вы забыли добавить параметр sender к своим контактамButtonPressed.

Является ли класс вашего представления именем NSCFSet?
Попробуйте вставить код.

...