Ошибка подтверждения в - [NSButton lockFocus] при удалении аннотации из выноски - PullRequest
0 голосов
/ 28 апреля 2019

Работая с платформой MapKit, я хочу удалить (пользовательскую) аннотацию, используя кнопку («удалить») в соответствующем calloutView.При нажатии кнопки ошибка появляется в разделе отладки XCode:

*** Ошибка подтверждения в - [NSButton lockFocus], /SourceCache/AppKit/AppKit-1348.17/AppKit.subproj/NSView.m:7629

Трассировка: 0 CoreFoundation 0x00007fff8347203c __exceptionPreprocess + 172 1 libobjc.A.dylib 0x00007fff84d6976e objc_exception_throw + 43 2 ядро ​​Corefoundation 0x00007fff 034: перегородка: file: lineNumber: description:] + 195 4 AppKit 0x00007fff8de035c6 - [NSView lockFocus] + 233 5 AppKit 0x00007fff8df8b164 - [NSControl mouseDown:] + 200

Вполне логично, что calloutView нельзя удалить, когда он естьвсе еще показано, поэтому я реализовал следующую процедуру:

В IBAction кнопки аннотация помечается для удаления, затем аннотация устанавливается для отмены выбора

В делегате didDeselect ..вид карты, фактическое удалениепроисходит

-(IBAction)trash:(id)sender {
    NSLog(@"put to trash");
    MyPointAnnotation *thisAnnotation = (MyPointAnnotation*)[relatedAnnotationView annotation];
    [thisAnnotation setFlaggedForDeletion:YES];  // deletion is managed in delegate didDeselect
    [thisAnnotation.pointMetadata->mapView deselectAnnotation:thisAnnotation animated:NO];
}
-(void) mapView:(MKMapView *)theMapView didDeselectAnnotationView:(nonnull MKAnnotationView *)view {
    if (customCalloutView) {
        [customCalloutView removeFromSuperview];
    }

    if([(MyPointAnnotation*)[view annotation] flaggedForDeletion]){
        [view removeFromSuperview];
        [theMapView removeAnnotation:[view annotation]];
    }
}

Я не ожидаю никаких предупреждений / ошибок, потому что я не удаляю аннотацию во время нажатия кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...