Ios 在MKMapView上尝试多个批注时发生SIGABRT错误
我一直在使用MKMapView,并在地图上放置注释钉。我正在努力在地图上为30个不同的位置放置30个PIN,并确保在添加每个附加位置后运行iPhone SDK。然后,不知从何而来,它开始崩溃,给我一个可怕的“西格伯特”。AG 我知道这可能是我语法上的一个小错误,但由于我刚刚复制和粘贴了以前有效的代码,所以我不知所措。我正在考虑使用MKCoordinateRegionMake使一切变得更加简洁。我读到这可能是一个选项,但我已经进入了大约10家商店,因此需要花费大量时间来切换,如果这是一个快速修复,我不想这样做 除了一个坐标外,我把所有的坐标都取出来,结果成功了。然后我又加了一个回来,它工作了,等等。出于某种原因,它工作了很多次,但有时它会锁定和崩溃。我认为这只是一个特定位置的问题,但它似乎从来没有任何位置的语法问题,特别是。所以现在我不知道是什么导致了它 我想这可能是一个分配和释放的问题,我做得不对?我曾试图在编写代码期间释放某些分配的空间,但问题仍然存在。我还尝试在代码执行期间不释放分配的空间,这也是同样的问题 这是我正在使用的代码,所有代码有时都在使用,因此我在MillersLocations文件中正确设置了标题、副标题和坐标: MapViewController.mIos 在MKMapView上尝试多个批注时发生SIGABRT错误,ios,annotations,mkmapview,sigabrt,Ios,Annotations,Mkmapview,Sigabrt,我一直在使用MKMapView,并在地图上放置注释钉。我正在努力在地图上为30个不同的位置放置30个PIN,并确保在添加每个附加位置后运行iPhone SDK。然后,不知从何而来,它开始崩溃,给我一个可怕的“西格伯特”。AG 我知道这可能是我语法上的一个小错误,但由于我刚刚复制和粘贴了以前有效的代码,所以我不知所措。我正在考虑使用MKCoordinateRegionMake使一切变得更加简洁。我读到这可能是一个选项,但我已经进入了大约10家商店,因此需要花费大量时间来切换,如果这是一个快速修复,
- (void)viewDidLoad
{
[super viewDidLoad];
//Miller's Neighborhood Market #56
MKCoordinateRegion store56;
store56.center.latitude = 36.8605679;
store56.center.longitude = -76.2866713;
store56.span.latitudeDelta = 0.1;
store56.span.longitudeDelta = 0.1;
[mapView setRegion:store56 animated:YES];
MillersLocations *ann56 = [[MillersLocations alloc]init];
ann56.title = @"Store #56";
ann56.subtitle = @"Come check us out!";
ann56.coordinate = store56.center;
[mapView addAnnotation:ann56];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #66
MKCoordinateRegion store66;
store66.center.latitude = 37.0942970;
store66.center.longitude = -76.4584890;
store66.span.latitudeDelta = 0.1;
store66.span.longitudeDelta = 0.1;
[mapView setRegion:store66 animated:YES];
MillersLocations *ann66 = [[MillersLocations alloc]init];
ann66.title = @"Store #66";
ann66.subtitle = @"Come check us out!";
ann66.coordinate = store66.center;
[mapView addAnnotation:ann66];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #21
MKCoordinateRegion store21;
store21.center.latitude = 37.0385289;
store21.center.longitude = -76.4004810;
store21.span.latitudeDelta = 0.1;
store21.span.longitudeDelta = 0.1;
[mapView setRegion:store21 animated:YES];
MillersLocations *ann21 = [[MillersLocations alloc]init];
ann21.title = @"Store #21";
ann21.subtitle = @"Come check us out!";
ann21.coordinate = store21.center;
[mapView addAnnotation:ann21];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #67
MKCoordinateRegion store67;
store67.center.latitude = 37.6823690;
store67.center.longitude = -77.5898330;
store67.span.latitudeDelta = 0.1;
store67.span.longitudeDelta = 0.1;
[mapView setRegion:store67 animated:YES];
MillersLocations *ann67 = [[MillersLocations alloc]init];
ann67.title = @"Store 67";
ann67.subtitle = @"Come check us out";
ann67.coordinate = store67.center;
[mapView addAnnotation:ann67];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #49
MKCoordinateRegion store49;
store49.center.latitude = 36.8550990;
store49.center.longitude = -76.1355950;
store49.span.latitudeDelta = 0.1;
store49.span.latitudeDelta = 0.1;
[mapView setRegion:store49 animated:YES];
MillersLocations *ann49 = [[MillersLocations alloc]init];
ann49.title = @"Store 49";
ann49.subtitle = @"Come check us out";
ann49.coordinate = store49.center;
[mapView addAnnotation:ann49];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #82
MKCoordinateRegion store82;
store82.center.latitude = 36.7848840;
store82.center.longitude = -76.1587459;
store82.span.latitudeDelta = 0.1;
store82.span.latitudeDelta = 0.1;
[mapView setRegion:store82 animated:YES];
MillersLocations *ann82 = [[MillersLocations alloc]init];
ann82.title = @"Store 82";
ann82.subtitle = @"Come check us out";
ann82.coordinate = store82.center;
[mapView addAnnotation:ann82];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #40
MKCoordinateRegion store40;
store40.center.latitude = 37.1236680;
store40.center.longitude = -76.5093960;
store40.span.latitudeDelta = 0.1;
store40.span.latitudeDelta = 0.1;
[mapView setRegion:store40 animated:YES];
MillersLocations *ann40 = [[MillersLocations alloc]init];
ann40.title = @"Store 40";
ann40.subtitle = @"Come check us out";
ann40.coordinate = store40.center;
[mapView addAnnotation:ann40];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #55
MKCoordinateRegion store55;
store55.center.latitude = 36.7704630;
store55.center.longitude = -76.6058140;
store55.span.latitudeDelta = 0.1;
store55.span.latitudeDelta = 0.1;
[mapView setRegion:store55 animated:YES];
MillersLocations *ann55 = [[MillersLocations alloc]init];
ann55.title = @"Store 55";
ann55.subtitle = @"Come check us out";
ann55.coordinate = store55.center;
[mapView addAnnotation:ann55];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #58
MKCoordinateRegion store58;
store58.center.latitude = 36.7818390;
store58.center.longitude = -76.0479090;
store58.span.latitudeDelta = 0.1;
store58.span.latitudeDelta = 0.1;
[mapView setRegion:store58 animated:YES];
MillersLocations *ann58 = [[MillersLocations alloc]init];
ann58.title = @"Store 58";
ann58.subtitle = @"Come check us out";
ann58.coordinate = store58.center;
[mapView addAnnotation:ann58];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #57
MKCoordinateRegion store57;
store57.center.latitude = 36.8216160;
store57.center.longitude = -76.4246680;
store57.span.latitudeDelta = 0.1;
store57.span.latitudeDelta = 0.1;
[mapView setRegion:store57 animated:YES];
MillersLocations *ann57 = [[MillersLocations alloc]init];
ann57.title = @"Store 57";
ann57.subtitle = @"Come check us out";
ann57.coordinate = store57.center;
[mapView addAnnotation:ann57];
[MillersLocations release];
//Not sure if release should be on this syntax
//Miller's Neighborhood Market #90
MKCoordinateRegion store90;
store90.center.latitude = 38.1330690;
store90.center.longitude = -77.5124230;
store90.span.latitudeDelta = 0.1;
store90.span.latitudeDelta = 0.1;
[mapView setRegion:store90 animated:YES];
MillersLocations *ann90 = [[MillersLocations alloc]init];
ann90.title = @"Store 90";
ann90.subtitle = @"Come check us out";
ann90.coordinate = store90.center;
[mapView addAnnotation:ann90];
[MillersLocations release];
//Not sure if release should be on this syntax
//56,66,21,67,49,90,82,40,55,58,57
}
错误线程1:程序接收信号SIGABRT。总是发生在线路上:
[地图视图设置区域:store57动画:是]
或者在store90上。也有其他商店发生过这种事,但总是在那条线上。没有我确定的押韵或理由
感谢所有能帮忙的人!抱歉如果我有点啰嗦,我只是想确保我包括了你需要帮助的任何信息
编辑
一旦我正确地合成了我创建的MKMapView Outlet,然后获得了发布它的代码[mapView release];,它就工作了;。我假设地图视图会自行发布,这可能是导致错误的原因
它工作得很好,然后我去添加另一个注释,它又崩溃了。当我删除新注释时,它会起作用,因此添加更多注释时会出现问题。AG。感谢您的帮助。谢谢。SIGABRT最可能的原因是store49的区域无效,导致NSInvalidArgumentException和SIGABRT 对于store49和之后的所有商店,未设置longitudeDelta。 只有latitudeDelta被设置了两次 将重复的latitudeDelta设置修复为longitudeDelta 另一个问题是:
[MillersLocations release];
这试图调用MillersLocation类的release,而不是您正在创建的类的实例。所有这些行都应更改为以下内容:
[ann56 release];
此外,不必每次都创建区域来设置注释。例如,您可以这样做:
MillersLocations *ann56 = [[MillersLocations alloc]init];
ann56.title = @"Store #56";
ann56.subtitle = @"Come check us out!";
ann56.coordinate = CLLocationCoordinate2DMake(36.8605679, -76.2866713);
[mapView addAnnotation:ann56];
[ann56 release];
添加所有注释后,可以创建一个包含所有注释的区域(如果需要),或者只显示最后一个注释,然后在末尾调用setRegion一次
此外,您可能希望将存储存储在plist中,并在plist中循环以创建注释,而不是在代码中单独创建注释
最后,您不应该删除[mapView版本];来自dealloc,即使是IBOutlet。哇,非常感谢。我不敢相信我忽略了latitudeDelta问题的语法错误。这是一个很大的帮助,非常感谢。对于阅读本文寻求帮助的任何人来说,您必须添加并导入CoreLocations框架以使用CLLocationCoordinate2DMake。