Ошибка SIGABRT при попытке нескольких аннотаций в MKMapView - PullRequest
0 голосов
/ 09 октября 2011

Я работаю с MKMapView и размещаю аннотации на карте. Я работаю над тем, чтобы разместить 30 контактов на карте для 30 различных местоположений, и после добавления каждого дополнительного местоположения обязательно запустил iPhone SDK. Затем, из ниоткуда, он начал падать и дать мне страшный «SIGABRT». 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".) Всегда возникает в строке:

[mapView setRegion: анимированный store57: ДА];

ИЛИ на store90. Есть и другие магазины, в которых это случалось, но всегда в том же духе. Никакой рифмы или причины, которую я определил.

Спасибо всем, кто может помочь! Извинитесь, если я немного скучный, я просто хотел убедиться, что я включил любую информацию, которая вам понадобится.

EDIT

Это сработало, как только я правильно синтезировал созданный мной MKMapView Outlet, а затем получил код для его выпуска ("[mapView release]") Я предполагаю, что MapViews выпускают сами, что было бы причиной ошибки.

Это работало нормально, а потом я добавил еще одну аннотацию, и она снова рухнула. Когда я удаляю новую аннотацию, она работает, поэтому возникает проблема, когда я добавляю больше. AG. Любая помощь приветствуется. Спасибо.

1 Ответ

1 голос
/ 11 октября 2011

Наиболее вероятной причиной SIGABRT является то, что область для store49 является недействительной, что приводит к NSInvalidArgumentException и SIGABRT.

Для store49 (и всех магазинов после этого) longitudeDelta не устанавливается.
Только latitudeDelta устанавливается (дважды).

Исправьте дубликатlatitudeDelta настройки на longitudeDelta.


Другая проблема заключается в следующем:

[MillersLocations release];

Это попытка вызвать release для класса MillersLocation, а не для экземпляраиз этого класса вы создаете.Все эти строки должны быть изменены на что-то вроде:

[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 один раз в конце.

Кроме того, вы можете сохранить магазины в списке и циклически перерисовывать список для создания аннотаций, а не создавать их отдельно в коде.

Наконец, вы не должны удалять [mapView release]; (из dealloc), даже если это IBOutlet.

...