#ios #objective-c #swift #nsobject
#iOS #objective-c #swift #nsobject
Вопрос:
Я пытаюсь настроить NSObject
, чтобы принять дополнительный параметр, однако всякий раз, когда я пытаюсь добавить это, я получаю:
NSInvalidArgumentException: -[TEATimeRange initWithStart:end:fill:]: unrecognized selector sent to instance`
Вот .h
файл:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface TEATimeRange : NSObject
@property (nonatomic) NSDate *start;
@property (nonatomic) NSDate *end;
@property (nonatomic) IBInspectable UIColor *fill;
(instancetype)timeRangeWithStart:(NSDate *)startTime end:(NSDate *)endTime fill:(UIColor *)fillColor;
- (id)initWithStart:(NSDate *)startTime end:(NSDate *)endTime fill:(UIColor *)fillColor;
@end
и .m
файл:
#import "TEATimeRange.h"
@implementation TEATimeRange
(instancetype)timeRangeWithStart:(NSDate *)startTime end:(NSDate *)endTime fill:(UIColor *)fillColor
{
return [[TEATimeRange alloc] initWithStart:startTime end:endTime fill:fillColor];
}
- (id)initWithStart:(NSDate *)startTime end:(NSDate *)endTime fill:(UIColor *)fillColor
{
self = [super init];
if (self) {
_start = startTime;
_end = endTime;
_fill = fillColor;
}
return self;
}
@end
Вызывающий экземпляр (в Swift):
TEATimeRange(start: someDateTime, end: someDateTime?.addingTimeInterval(TimeInterval(someTime)), fill: .orange)
Если я удалю ссылки на fill:
него, он будет работать как ожидалось, поэтому я не понимаю, почему.
Я попытался выполнить поиск SO, но, поскольку у меня всего 3 дня опыта разработки iOS, я не смог найти никакого решения, поэтому буду признателен за любую помощь. (Даже если это глупо!)
Комментарии:
1. Ваш код компилируется, но вы получаете эту ошибку во время выполнения? Это не должно помочь, но изменится
id
наinstancetype
для вашегоinit...
метода. Кроме того, покажите код, который создаетTEATimeRange
экземпляр.2. Я только что добавил ваш класс точно как есть в тестовый проект iOS. Строка, такая как
TEATimeRange *range = [TEATimeRange timeRangeWithStart:[NSDate date] end:[NSDate date] fill:[UIColor redColor]];
построенная и запущенная без ошибок.3. @rmaddy Я обновил свой вопрос соответствующим экземпляром creation, обратите внимание, что вызывающий объект находится в swift против objc
4. Вы уверены, что ваш обновленный
.m
файл включен в ваше целевое приложение и повторно скомпилирован?5. @OOPer Я очистил свою папку сборки и перестроил ее. Это то, что вы имеете в виду? И да,
TEAChart
родительский элемент импортируется в файл целевого приложенияUIViewController
Ответ №1:
Для будущих разработчиков, которые попали на эту страницу, моя проблема была решена следующим образом:
- Очистить папку сборки (Продукт> Очистить папку сборки или ⇧ ⌘ K)
- Перезапуск Xcode
- Повторный запуск приложения
См. Комментарии выше от @OOPer и @rmaddy для получения дальнейших указаний, если это не сработает
Комментарии:
1. Это работает, потому что добавленное вами свойство является объектом Interface Builder (IB), и в большинстве случаев необходимо очистить папку сборки, попробуйте добавить новое свойство, такое как NSString или NSInteger, молодец и играй с кодом 🙂 приветствия