gpt4 book ai didi

ios - 用户触摸注释时出现无法识别的选择器崩溃

转载 作者:技术小花猫 更新时间:2023-10-29 11:07:37 26 4
gpt4 key购买 nike

我有一个用于显示 map 和自定义注释的应用程序。当用户触摸注释时,我的应用程序崩溃了。它只发生在 iOS 7 中。它在 iOS 6 和 iOS 5 上运行良好。

以下是控制台中显示的崩溃报告:

ERROR: Trying to select an annotation which has not been added
-[__NSSetM coordinate]: unrecognized selector sent to instance 0x18c9d580
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSSetM coordinate]: unrecognized selector sent to instance 0x18c9d580'
*** First throw call stack:
(
0 CoreFoundation 0x020415e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x016918b6 objc_exception_throw + 44
2 CoreFoundation 0x020de903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3 CoreFoundation 0x0203190b ___forwarding___ + 1019
4 CoreFoundation 0x0206e46e __forwarding_prep_1___ + 14
5 MapKit 0x000de10c _Z21_insertionNodeForItemP11objc_objectP14MKQuadTrieNode + 50
6 MapKit 0x000de428 _Z9_containsP11objc_objectP14MKQuadTrieNode + 27
7 MapKit 0x000de8ed -[MKQuadTrie contains:] + 39
8 MapKit 0x000d4918 -[MKAnnotationManager selectAnnotation:animated:avoid:] + 116
9 MapKit 0x00090789 -[MKMapView handleTap:] + 541
10 UIKit 0x0056ae8c _UIGestureRecognizerSendActions + 230
11 UIKit 0x00569b00 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 383
12 UIKit 0x0056b56d -[UIGestureRecognizer _delayedUpdateGesture] + 60
13 UIKit 0x0056eacd ___UIGestureRecognizerUpdate_block_invoke + 57
14 UIKit 0x0056ea4e _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 317
15 UIKit 0x00565148 _UIGestureRecognizerUpdate + 199
16 CoreFoundation 0x020094ce __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
17 CoreFoundation 0x0200941f __CFRunLoopDoObservers + 399
18 CoreFoundation 0x01fe7344 __CFRunLoopRun + 1076
19 CoreFoundation 0x01fe6ac3 CFRunLoopRunSpecific + 467
20 CoreFoundation 0x01fe68db CFRunLoopRunInMode + 123
21 GraphicsServices 0x01f6c9e2 GSEventRunModal + 192
22 GraphicsServices 0x01f6c809 GSEventRun + 104
23 UIKit 0x001f2d3b UIApplicationMain + 1225
24 CustomMKAnnotationView 0x0000285a main + 170
25 CustomMKAnnotationView 0x000027a5 start + 53
)
libc++abi.dylib: terminating with uncaught exception of type NSException

我按照以下方式创建了代码:

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view.annotation isKindOfClass:[BasicMapAnnotation class]])
{
if (_calloutAnnotation.coordinate.latitude == view.annotation.coordinate.latitude&&
_calloutAnnotation.coordinate.longitude == view.annotation.coordinate.longitude)
{
return;
}
if (_calloutAnnotation)
{
[mapView removeAnnotation:_calloutAnnotation];
_calloutAnnotation = nil;
}
_calloutAnnotation = [[[CalloutMapAnnotation alloc]
initWithLatitude:view.annotation.coordinate.latitude
andLongitude:view.annotation.coordinate.longitude]autorelease];
[mapView addAnnotation:_calloutAnnotation];

[mapView setCenterCoordinate:_calloutAnnotation.coordinate animated:YES];
}else
{
if([delegate respondsToSelector:@selector(customMKMapViewDidSelectedWithInfo:)])
{
[delegate customMKMapViewDidSelectedWithInfo:@"Annotation clicked"];
}
}
}

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
if (_calloutAnnotation&& ![view isKindOfClass:[CallOutAnnotationVifew class]])
{
if (_calloutAnnotation.coordinate.latitude == view.annotation.coordinate.latitude&&
_calloutAnnotation.coordinate.longitude == view.annotation.coordinate.longitude)
{
[mapView removeAnnotation:_calloutAnnotation];
_calloutAnnotation = nil;
}
}
}

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[CalloutMapAnnotation class]])
{

CallOutAnnotationVifew *annotationView = (CallOutAnnotationVifew *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CalloutView"];
if (!annotationView)
{
annotationView = [[[CallOutAnnotationVifew alloc] initWithAnnotation:annotation reuseIdentifier:@"CalloutView"] autorelease];
JingDianMapCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"JingDianMapCell" owner:self options:nil] objectAtIndex:0];
cell.titleLable.text = @"Testing";
[annotationView.contentView addSubview:cell];

}
return annotationView;
}else if ([annotation isKindOfClass:[BasicMapAnnotation class]])
{

MKAnnotationView *annotationView =[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomAnnotation"];
if (!annotationView)
{
annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"CustomAnnotation"] autorelease];
annotationView.canShowCallout = NO;
annotationView.image = [UIImage imageNamed:@"pin.png"];
}

return annotationView;
}
return nil;
}

在 didSelectAnnotationView 和 didDeselectAnnotationView 中,我添加了新的注释 View 并删除了旧的注释 View 。注释 View 是自定义类。而_calloutAnnotation 是CalloutMapAnnotation 的一个对象,CalloutMapAnnotation 是用于添加注解的NSObject 类。

最佳答案

_calloutAnnotation不包含注释 View 。我认为你有这样的代码 @prorerty (weak, nonatomic) MKAnnotation * calloutAnnotation;改变 weakstrong应该有帮助。

关于ios - 用户触摸注释时出现无法识别的选择器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com