Сбой приложения, если AddAnnotations не заканчивается - PullRequest
1 голос
/ 26 ноября 2011

У меня есть приложение, которое представляет собой SplitViewController, с основным представлением слева и подробным представлением справа. Одним из представлений (Branch Finder) является представление «Карта», которое загружает на карту ряд аннотаций.

Если я разрешу загружать аннотации перед переключением в любое другое представление (загрузка аннотаций занимает всего 1 секунду), тогда все в порядке. Однако, если пользователь быстро отключит представление Branch Finder во время загрузки аннотаций, приложение будет аварийно завершено со следующим уведомлением:

[BranchFinder_iPad responsedsToSelector:]: сообщение отправлено освобожденному экземпляру 0x807d230

Теперь я думаю, что экземпляр освобождения будет ссылаться на массив (объявленный в заголовке представления), который содержит все освобождающиеся аннотации и имеет значение nil, когда пользователь покидает представление BranchFinder_iPad. Это массив, который передается методу addAnnotations.

[self.mapView addAnnotations:branchSites];

Кто-нибудь еще сталкивался с проблемой, когда при выходе из вида, в середине размещения добавок происходит сбой, и происходит сбой, если пользователь переходит к другому представлению.

Просто чтобы уточнить:

  • Если я дождусь загрузки аннотаций, переключение на любое другое представление не вызовет проблем.
  • У меня был собственный вид аннотации, но я удалил его из своего кода (чтобы исключить его из микса). Это ничего не изменило.
  • Я искал помощь в этом вопросе в другом месте, но многие учебные пособия по видам, относящиеся к видам карты, предназначены только для одного вида, поэтому такой проблемы не возникало.
  • Я обнаружил смутно похожую проблему при следующем: mapkit addAnnotations падает
  • И, наконец, я только что перешел к x-code 4. Я думаю, что некоторые из моих проблем связаны с тем, что я переучиваю некоторые вещи, которые мне следует знать.

С уважением, Натан А

PS: я хотел прикрепить к этому изображение, но у меня возникли проблемы. У меня нет репутации, чтобы делать это изначально, и мое рабочее место не позволяет мне получать доступ к любым порталам хостинга изображений. Я постараюсь добавить изображение позже сегодня.

1 Ответ

3 голосов
/ 27 ноября 2011

Привет всем, кто читает это.

Я в основном здесь совершил ошибку новичка - для MKMapView в моем приложении мне пришлось установить для делегата значение nil как часть процедуры освобождения в моем представлении. Apple документация упоминает об этом в следующем документе:

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html

Для соответствующего раздела:

Перед выпуском объекта MKMapView, для которого вы установили делегат, не забудьте установить для свойства делегата этого объекта значение nil. Единственное место, где вы можете сделать это, - это метод dealloc, где вы избавляетесь от вида карты.

Отсутствие этого вызывало проблему только в том случае, если я переключился на другое представление И, если на MKMapView все еще ссылались при выполнении кода, такого как подпрограмма addAnnotations.

...