Перейти к содержанию
Fire Monkey от А до Я
  • 0

Приложение падает при закрытие формы с компонентом MapView


beklexx

Вопрос

Здравствуйте.

Помогите пожалуйста с одним вопросом.

Есть приложение где форма с компонентом MapView вызывается через show. Так вот, если закрыть эту вызванную форму приложение падает.

При этом, если на OnShow формы с компонентом выставлять MapView.Visible:= True, а на OnClose MapView.Visible:= False то всё работает нормально. Но, так как это не указано в документации, возникает вопрос, как правильно с этим бороться?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Добрый день,

 

Прикрепите, пожалуйста, чистый проект на котором эта проблема воспроизводится.

 

Спасибо

Ссылка на комментарий
  • 0

подтверждаю, нашел методом тыка точно такой же способ

на форме только TMapView, это не главная форма приложения.
открываю форму, нажимаю back, либо любым способом делаю Close, DisposeOf и т.д.

вываливается вот с таким стеком

Dbzb2R6m.png

Ссылка на комментарий
  • 0

Дополнение

Если добавляли маркеры и т.д. на MapView, ссылки на них нужно хранить, чтобы уничтожить

 

Если я правильно понял, то дело опять в ARC, и, если мы не сохраняем результат функции

Map1.AddMarker(markerDescription) 

RefCount маркера все равно увеличивается

так что 

marker:=Map1.AddMarker(markerDescription);
...
marker:=NIL;
Ссылка на комментарий
  • 0
  • Модераторы

код будет таким

marker:=Map1.AddMarker(markerDescription);
...
if Assigned(marker) then
marker.remove;

а если хранить точки в TList<TMapCoordinate> то просто очистить List не приведет к удалению маркеров с карты

нужно использовать

for marker in List do
  marker.remove;
List.clear;

а на счет вываливания приложения с ошибкой, то перед выходом скорей всего нужно прописать Удаление Сервиса

 

есть такой код в FMX.Maps.Android

var
  MapService: TAndroidMapService;

procedure RegisterMapService;
begin
  MapService := TAndroidMapService.Create;
  TPlatformServices.Current.AddPlatformService(IFMXMapService, MapService);
end;

выполняется он в FMX.Maps

initialization
RegisterMapService;

но я нигде не нашел UnRegisterMapService (ну или что-то подобное)

 

во-общем суть такова: написать самому UnRegisterMapService  (для всех платформ) и тогда можно будет избавиться от ошибок с другими формами и динамическим созданием

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

спасибо. надо попробовать

 

если хранить точки в TList<TMapCoordinate>

 

вот и причина не хранить в TList ))))

храним их в TObjectList<TMapCoordinate>

тогда все удалится нормально )))

Ссылка на комментарий
  • 0
  • Модераторы

спасибо. надо попробовать

 

если хранить точки в TList<TMapCoordinate>

 

вот и причина не хранить в TList ))))

храним их в TObjectList<TMapCoordinate>

тогда все удалится нормально )))

нужно попробовать, хотя и так все работает корректно

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...