我一直在使用 MKMapView 并在地图上放置注释图钉。我正在努力在地图中为 30 个不同的位置放置 30 个图钉,并确保在添加每个附加位置后运行 iPhone SDK。然后,不知从何而来,它开始崩溃并给了我可怕的“SIGABRT”。啊!!
我知道这可能是我的语法中的一个小错误,但由于我只是在复制和粘贴以前有效的代码,所以我很茫然。我正在考虑使用 MKCoordinateRegionMake 让一切更简洁(我读到这可能是一个选项)但我已经进入了 10 家商店,所以需要很多时间来切换它,我不想要如果这是一个快速解决方法。
我继续取出除一个坐标外的所有坐标,它起作用了。然后我又加了一个,它工作了,等等。出于某种原因,它工作了很多次,但有时它会锁定并崩溃。我认为这只是特定位置的问题,但它似乎从来没有特别是任何位置的语法问题。所以现在我不知道是什么原因造成的。
我认为这可能是分配和释放我做得不对的问题?我试图在代码期间“释放”某些分配的空间,但问题仍然存在。我也尝试在代码期间不释放分配空间的情况下这样做,同样的问题。
这是我正在使用的代码(所有代码有时都有效,所以我在 MillersLocations 文件中正确设置了标题、副标题和坐标):
MapViewController.m
- (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”。)总是发生在以下行:
[mapView setRegion:store57 动画:YES];
或者也在 store90 上。还有其他商店也发生过这种情况,但总是在那条线上。没有我已经确定的押韵或理由。
感谢任何可以提供帮助的人!抱歉,如果我有点啰嗦,我只是想确保我包含了您需要帮助的任何信息。
编辑
一旦我正确合成了我创建的 MKMapView 插座,然后获得了发布它的代码(“[mapView 发布];”),它就起作用了。我假设 MapViews 会自行发布,这可能是导致错误的原因。
它工作得很好,然后我去添加另一个注释,它又崩溃了。当我删除新注释时它会起作用,所以当我添加更多注释时会出现问题。AG。任何帮助表示赞赏。谢谢。