2015-08-17 2 views
2

Я пытаюсь добавить аннотацию на ощупь на MapView и после того, как я выпускаю прессу я получаю эту ошибку:Непризнанный Selector [индекс MKPointAnnotation]

[MKPointAnnotation index] : unrecognized selector sent to instance

Может кто-нибудь дать мне представление о том, что причиной является ?

Код:

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer.state != UIGestureRecognizerStateBegan) 
    { 
     return; 
    } 
    CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView]; 
    CLLocationCoordinate2D touchMapCoordinate = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView]; 
    MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; 
    point.coordinate = touchMapCoordinate; 
    point.title = @"Test"; 
    point.subtitle = @"Test2"; 
    for (id annotation in self.mapView.annotations) { 
     [self.mapView removeAnnotation:annotation]; 
    } 

    [self.mapView addAnnotation:point]; 
} 

Вот что у меня в ViewDidLoad метод:

if (_isSelectLocation) 
{ 
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
    longPressGestureRecognizer.minimumPressDuration = 0.5; 
    [self.mapView addGestureRecognizer:longPressGestureRecognizer]; 
} 

Добавлено Stack след:

Stack trace : (
0 Lookcounter       0x0000000100145680 -[MapViewController handleLongPress:] + 1016 
1 UIKit        0x000000018a2ceec4 <redacted> + 276 
2 UIKit        0x000000018a168508 <redacted> + 580 
3 UIKit        0x000000018a5d9214 <redacted> + 60 
4 UIKit        0x000000018a12c26c <redacted> + 292 
5 UIKit        0x000000018a12a618 <redacted> + 2504 
6 CoreFoundation      0x0000000185673ff0 <redacted> + 32 
7 CoreFoundation      0x0000000185670f7c <redacted> + 360 
8 CoreFoundation      0x000000018567135c <redacted> + 836 
9 CoreFoundation      0x000000018559cf74 CFRunLoopRunSpecific + 396 
10 GraphicsServices     0x000000018eff76fc GSEventRunModal + 168 
11 UIKit        0x000000018a19ed94 UIApplicationMain + 1488 
12 Lookcounter       0x00000001001418d0 main + 124 
13 libdyld.dylib      0x0000000197a32a08 <redacted> + 4 
) 
+0

Есть ли место в вашем коде, в котором вы отправляете сообщение «index» объекту? Код, который вы опубликовали, выглядит отлично. Можете ли вы также опубликовать целую трассировку стека? – Losiowaty

+0

Я отредактировал мое сообщение, чтобы показать его. Это то, что вы искали? – linuxer

+0

Да, хотя отредактированные части странны и неинформативны. Не могли бы вы добавить контрольную точку исключения (https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html) или отладить ваш обработчик шаг за шагом и сообщить нам, по какой строке это происходит не точно ? Случается ли это всегда, или со вторым/третьим/т. Е. Касанием? Также на каком устройстве (и если симулятор) и iOS-версия вы получаете? – Losiowaty

ответ

1

Я не уверен, что это проблема. Я скопировал весь ваш код и хорошо работает. И я отправляю его как проект в github.

https://github.com/zhangjianxing/trySelectorApp

Я верю, что есть другая вещь, потому что компилятор не признал селектор (в стрижа, если вы установите «handleLongPress» быть частным, возникнет та же ошибка).

Предлагаю вам прокомментировать другой метод/свойства и повторите попытку.

+1

Это оказалось чем-то одним из методов делегата. В частности, viewForAnnotation. – linuxer

+0

его довольно хорошо, что вы это узнаете. Но почему «viewForAnnotation» приведет к непризнанию «handleLongPress». Есть ли частная функция, которая имеет то же имя, в делегате? –

+0

Я использовал пользовательскую аннотацию для других целей приложения, и у нее есть свойство, которого нет в общей аннотации. – linuxer

Смежные вопросы