Ios 在MKMapView上尝试多个批注时发生SIGABRT错误

Ios 在MKMapView上尝试多个批注时发生SIGABRT错误,ios,annotations,mkmapview,sigabrt,Ios,Annotations,Mkmapview,Sigabrt,我一直在使用MKMapView,并在地图上放置注释钉。我正在努力在地图上为30个不同的位置放置30个PIN,并确保在添加每个附加位置后运行iPhone SDK。然后,不知从何而来,它开始崩溃,给我一个可怕的“西格伯特”。AG 我知道这可能是我语法上的一个小错误,但由于我刚刚复制和粘贴了以前有效的代码,所以我不知所措。我正在考虑使用MKCoordinateRegionMake使一切变得更加简洁。我读到这可能是一个选项,但我已经进入了大约10家商店,因此需要花费大量时间来切换,如果这是一个快速修复,

我一直在使用MKMapView,并在地图上放置注释钉。我正在努力在地图上为30个不同的位置放置30个PIN,并确保在添加每个附加位置后运行iPhone SDK。然后,不知从何而来,它开始崩溃,给我一个可怕的“西格伯特”。AG

我知道这可能是我语法上的一个小错误,但由于我刚刚复制和粘贴了以前有效的代码,所以我不知所措。我正在考虑使用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。总是发生在线路上:

[地图视图设置区域: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。