У меня есть метод инициализации, который принимает аргумент (id):
-(id) initWithObject:(id) obj;
Я пытаюсь назвать это так:
[[MyClass alloc] initWithObject:self];
Но XCode жалуется на то, что аргумент является «отдельным типом Objective-C» (который обычно указывает на несоответствие типов или уровень косвенной ошибки).
Если я явно приведу себя к (id), предупреждение исчезнет. В любом случае код работает должным образом. Интересно, что в следующей строке я передаю self другому методу, который также принимает идентификатор, и он отлично работает.
Мне интересно, не хватает ли мне чего-то тонкого - или это особенность компилятора?
Мне не совсем комфортно просто кастовать это, пока я не уверен в причинах, по которым это необходимо.
[Редактировать]
Меня попросили предоставить больше кода. Не уверен, что есть еще что-то актуальное. Вот мой фактический код, который выполняет вызов. Обратите внимание, что он сам находится внутри метода инициализации. Это вызов initWithSource
, который выдает предупреждение:
-(id) initWithFrame:(CGRect) frame
{
self = [super initWithFrame: frame];
if( self )
{
delegate = nil;
touchDelegate = [[TBCTouchDelegate alloc] initWithSource:self];
[touchDelegate.viewWasTappedEvent addTarget: self action:@selector(viewWasTapped:)];
}
return self;
}
И вот вызываемый метод init:
-(id) initWithSource:(id) sourceObject
{
self = [super init];
if (self != nil)
{
// Uninteresting initialisation snipped
}
return self;
}