Intereting Posts
Ошибка входа в систему Google OAuth: недопустимые учетные данные SlideMenu не обнаруживает штрихи для меню увольнения на iOS 11. Почему? Получение имени пользователя после аутентификации с помощью предиката coredata Не удалось найти перегрузку для «PathForResource» при воспроизведении аудиофайла Отображение push-уведомления APNS с помощью Unicode в iOS iOS – удалить цифру в текстовом поле при нажатии кнопки Twitter «статус обновления» URL не работает на iOS Связывание objC с RoboVM в Java Как всегда показывать последнюю страницу UIWebView Когда отладка iAd загорается на реальном устройстве Подклассификация UITableViewCell (и, возможно, использование id) Как настроить новый проект XCode iOS для экрана с высоким разрешением (сетка iPhone 4)? Изменение цвета шрифта кнопки при касании iOS easy-sketch.js поддерживает мобильные устройства? Разделитель iOS UITabViewItem и цвет фона для выбранного TabItem

Переопределить сеттер в объективе-c

Я хочу установить NSDate из NSInteger и у меня есть @property :

@property (strong,nonatomic) NSDate *date;

Я хочу сеттер:

 -(void)setDate:(NSInteger *)tStamp { thumbImgUrl = [NSDate dateWithTimeIntervalSince1970:tStamp]; } 

Поэтому я хочу установить дату из значения NSInteger не значение NSDate . Как я могу объявить этот сеттер? Когда я пытаюсь поместить его в файл заголовка, он работает нормально, но я получаю предупреждение:

Type of property 'date' does not match type of accessor 'setDate:

И если я хочу объявить его в файле .m, я получаю ошибку:

duplicate declaration of method setDate:

Зачем? Есть способ объявить сеттер с другим типом ввода?

Как правило, это очень плохой способ делать вещи в Objective-C, и я настоятельно рекомендую вам изменить имя метода на что-то еще, например -(void)setDateWithInteger:(NSInteger)tStamp . (Говоря об этом, NSInteger является примитивным, а не объектом). И чтобы ответить на ваш вопрос, нет, нет способа объявить сеттер с другим типом ввода, если вы используете @property . Если вы настаиваете на том, чтобы делать это по-своему, вам придется объявить метод, не используя @property .

Вы можете принять тип id в качестве входного параметра функции setter.

Вы получаете duplicate declaration of method setDate: потому что, скорее всего, у вас есть строка @synthesize date в вашем файле реализации. Это автоматически создает для вас геттер / сеттеры. Удалите эту строку, поскольку вы предоставляете свою собственную реализацию.