Установка свойства класса дает нераспознанную ошибку селектора

Я очень плохо знаком с объективом c и iOS. Это мое первое приложение, так что терпите меня.

Я просто пытаюсь создать страницу с некоторыми кнопками, динамически созданными из текстового файла, которые откроют страницу в веб-просмотре.

Я основываю свой код на следующем: как могу ли я передать какой-либо параметр в действие UiButton?

Моя кнопка.h

#import <Foundation/Foundation.h>

@interface MyButton : UIButton
{
    NSString *_linkURL;
}
@property (nonatomic, retain) NSString *linkURL;
@end

MyButton.m

#import "MyButton.h"

@implementation MyButton
@synthesize linkURL = _linkURL;
@end

Итак, в моем файле ViewController.m я импортирую MyButton и пытаюсь использовать его для создания кнопок, которые имеют URL-адрес в качестве собственного свойства.

MyButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button setLinkURL:URL]; //THIS IS THE LINE THATS GIVING ME THE unrecognized selector at instance error

Затем я продолжаю получать URL-адрес в методе buttonPressed, но, похоже, я не могу пройти мимо этой ошибки. Я понятия не имею, что я делаю неправильно.


person Kierchon    schedule 04.12.2013    source источник
comment
Это ошибка компиляции или ошибка времени выполнения? И вы хотите MyButton *button = [MyButton buttonWithType:UIButtonTypeRoundedRect];   -  person rmaddy    schedule 04.12.2013
comment
Это ошибка времени выполнения, но это исправило ее. Спасибо, я просто не заметил эту опечатку. Отправьте как ответ и плохо примите, если хотите   -  person Kierchon    schedule 04.12.2013
comment
Во-первых, избавьтесь от объявления ivar и строки @synthesize. Тоже не надо. Если вы создаете свойство linkURL, компилятор автоматически создает ivar _linkURL. Кроме того, опубликуйте фактическую ошибку, не перефразируя.   -  person rdelmar    schedule 04.12.2013
comment
Вам больше не нужен ивар. Вы получите тот же результат, что и раньше, если у вас просто есть объявление свойства. См. этот ответ для более подробной информации.   -  person DrummerB    schedule 04.12.2013


Ответы (2)


Проблема в этой строке:

MyButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

Должен быть:

MyButton *button = [MyButton buttonWithType:UIButtonTypeRoundedRect];

Поскольку у вас было это, вы создавали экземпляр UIButton вместо MyButton.

person rmaddy    schedule 04.12.2013

Ваша проблема с этой строкой:

MyButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

Вы преобразуете UIButton в MyButton, но объекты типа UIButton не обладают свойствами объекта MyButton. Вам нужно что-то вроде:

MyButton *button = [[MyButton alloc] initWithType:UIButtonTypeRoundedRect];
person godel9    schedule 04.12.2013
comment
Да, rmaddy упомянул об этом, и он исправил это, но это не давало мне ошибки компиляции или предупреждения. Это сэкономило бы мне около 30 минут моей жизни. - person Kierchon; 04.12.2013
comment
@Kierchon Правильно ... Метод buttonWithType возвращает тип id, который можно привести к чему угодно без предупреждения. - person godel9; 04.12.2013