- Status: Fixed
- Priority: Minor
- Resolution: Fixed
- Platform: iOS
- Affects version: 1.9.4.1
Здравствуйте.
Для простоты возьмем стандартный пример MapObjectsDemo из поставки.
1) Избавляемся от использования модулей FGX.*.Android, Android.*
2)Отключаем опцию myLocation, дабы не повторять ошибку при определении местоположения
3)Очищаем процедуру fgFormShow, в связи с ненужностью оной
4) Меняем процедуру
procedure TFormMain.fgMap1MarkerTap(Sender: TObject; const AMarker: TfgMapMarker); const rsCar='https://upload.wikimedia.org/wikipedia/en/2/2d/Front_left_of_car.jpg'; var A:TfgAssetBitmapSet; begin if not TfgAssetsManager.Current.Find<TfgAssetBitmapSet>('CARJPG',A) then begin TfgAssetsManager.Current.AddBitmapFromUrl('CARJPG',rsCar); end; TfgToast.Show(Format('Marker id=%s title=%s', [AMarker.Id, AMarker.Title])); end;
5) После запуска, добавления маркера и нажатия на него, получим ошибку
Module Load: dyld. No Debug Info. Base Address: $0000000102A84000. Process MapObjectsDemo (1173)
Exception EAccessViolation in module libsystem_platform.dylib at 00000001C8BD6108. Process MapObjectsDemo (1173)
Access violation at address 00000001C8BD6108, accessing address 0000000115ED0000. Process MapObjectsDemo (1173)
First chance exception at $0000000100D90648. Exception class EfgPlatformService with message 'Сервис не поддерживается. id="IFGXScreenService"'. Process MapObjectsDemo (1173)
Со стеком
System._DbgExcNotify(int, void*, System.SmallString<(unsigned char)255>*, void*, void*) System.NotifyReRaise(System.TObject*, void*)(0x000000028320d000,0x0000000100d90648) System._RaiseAtExcept(System.TObject*, void*)(0x000000028320d000,0x0000000100d90648) System._RaiseExcept(System.TObject*)(0x000000028320d000) Fgx.Screen.TfgScreenManager.Main()(0x0000000101622280) Fgx.Assets.Bitmapset.TfgAssetBitmapSet.FindBitmapInfo(Fgx.Assets.Bitmapset.TfgBitmapInfo*&)(??,0x000000016f597048) Fgx.Assets.Ios.AssetToUIImage(Fgx.Assets.TfgAsset*, System.Uitypes.TAlphaColor, Fgx.Assets.Ios.TfgDrawableMode)(0x0000000283286040,0) Fgx.Assets.Ios.AssetToUIImage(Fgx.Assets.TfgAsset*, Fgx.Assets.Ios.TfgDrawableMode)(0x0000000283286040,Default) Fgx.Navigationbar.Ios.TfgiOSNavigationBarActionsButtonsContainer.CreateButton(Fgx.Navigationbar.Types.TfgNavigationBarButton*)(0x0000000280981380,0x000000028099d900) Fgx.Navigationbar.Ios.TfgiOSNavigationBarActionsButtonsContainer.RefillButtons(Fgx.Navigationbar.Types.TfgNavigationBarButtons*)(0x0000000280981380,0x00000002804eeee0) Fgx.Navigationbar.Ios.TfgiOSNavigationBar.RecreateActionButtons()(0x0000000280982580) Fgx.Navigationbar.Ios.TfgiOSNavigationBar.WMButtonChanged(Fgx.Messaging.TfgMessage__1<Fgx.Navigationbar.TfgButtonChangedInfo>&)(0x0000000280982580)
6) Поменяем тактику, бросим на форму компонент ht:TNetHttpClient и поменяем процедуру нажатия на маркер, следующим образом
procedure TFormMain.fgMap1MarkerTap(Sender: TObject; const AMarker: TfgMapMarker); const rsCar='https://upload.wikimedia.org/wikipedia/en/2/2d/Front_left_of_car.jpg'; var A:TfgAssetBitmapSet; B:TfgBitmap; s:TStream; F:TFileStream; FName:String; begin if not TfgAssetsManager.Current.Find<TfgAssetBitmapSet>('CARJPG',A) then begin // TfgAssetsManager.Current.AddBitmapFromUrl('CARJPG',rsCar); Убираем падение s:=ht.Get(rsCar).ContentStream; s.Position:=0; FName:=TPath.GetTempFileName+'.jpg'; F:=TFileStream.Create(FName,fmCreate); F.CopyFrom(s,s.size); F.Free; A:=TfgAssetsManager.Current.AddBitmapFromFile('CARJPG',FName); end; //Тут мы грузим картинку в описание, но это никому уже неинтересно if TfgAssetsManager.Current.Find<TfgAssetBitmapSet>('CARJPG',A) then TfgiOSMapMarker(AMarker).AnnotationView.setDetailCalloutAccessoryView( TUIImageView.Wrap(TUIImageView.Alloc.initWithImage(AssetToUIImage(A))) ); TfgToast.Show(Format('Marker id=%s title=%s', [AMarker.Id, AMarker.Title])); end;
7) Ошибка ушла, у меня есть подозрение, что ошибка возникает в случае TfgBitmap.CreateFromStream
Delphi 10.4.2 SDK 14.4 IOS 14.4.4 Ipad mini 4
Спасибо.
Fix version: 1.10.0.0
Recommended Comments
Create an account or sign in to comment