В вашем коде три проблемы.Во-первых, вам нужно импортировать Shot.h в ваш файл реализации CustomImageView.m:
#import "Shot.h"
вместо простого объявления класса Shot
вперед:
@class Shot;
Когда компиляторвидит предварительное объявление, ему становится известно о существовании этого класса, но он еще не знает его атрибутов, объявленных свойств или методов - в частности, он не знает, что Shot
имеет -SetPoint:
метод экземпляра.
Во-вторых, вы не создаете экземпляр Shot
:
Shot *shot;
[shot SetShot:point];
Это только объявляет, что shot
является указателем на Shot
, но естьнет выделения / инициализации.Вы должны создать объект, то есть:
Shot *shot = [[Shot alloc] init];
, затем использовать его:
[shot SetShot:point];
и, когда он вам больше не нужен, отпустить его:
[shot release];
Хотя неясно, в чем выгода создания выстрела, установки его точки и последующего выпуска.Если ваш код не является надуманным примером, вы можете переосмыслить это поведение.
Кроме того, ваш метод -SetPoint:
имеет указатель на параметр CGPoint
, но вы передаете значение CGPoint
(т. Е.не указатель) аргумент:
// point is not a pointer!
CGPoint point = [touch locationInView:self];
Shot *shot;
[shot SetShot:point];
Я предлагаю вам полностью удалить указатель, т.е.:
- (void)SetShot:(CGPoint)point;
{
position = point;
}
и, возможно, использовать объявленное свойство вместо вручнуюреализован метод сеттера.