AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung [FMX-iOS] dynamische Livebindings funktionieren teilweise
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX-iOS] dynamische Livebindings funktionieren teilweise

Ein Thema von Devil1925 · begonnen am 30. Nov 2017 · letzter Beitrag vom 6. Dez 2017
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#1

[FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 30. Nov 2017, 12:35
Moin,
ich steh mal wieder vor ner Wand.
Ich erzeuge auf meinem Formular dynamisch Komponenten, welche ich dann ebenfalls dynamisch mit meiner Datenquery über Livebindings verbinde. Das Funktioniert auch erstmal alles wunderbar. Die komponenten werden erzeugt und die Daten über die Livebindings eingetragen und entsprechend angezeigt. Möchte ich die Daten jetzt bearbeiten (z.B. in einem Edit Feld), funktioniert das ganze auf Android einwandfrei und die geänderten Daten werden auch zurück in die Datenbank geschrieben. Auf iOS hingegen werden die Daten nicht abgespeichert, und bei z.B. einem TDateEdit stürzt die App beim eingeben eines geänderten Datums ab.

Hier die Prozedur zum Anlegen der LiveBindings:
Delphi-Quellcode:
procedure TForm1.LinkToControl(Control: TControl; DataSet: TUniQuery; FieldName: string);
var
  DataName: string;
  BindSourceDB: TBindSourceDB;
  BindingsList: TBindingsList;
  LinkListControl: TLinkListControlToField;
  LinkControl: TLinkControlToField;
begin
  DataName := DataSet.Name;
  if (DataName = '') and Assigned(DataSet.DataSource) then
    DataName := DataSet.DataSource.Name;

  if Assigned(Control.FindComponent(DataName + '_BindSource')) then
    raise Exception.CreateFmt('LinkToControl: %s.%s ist bereits an %s (%s) gebunden.', [DataName, FieldName, Control.Name, Control.ClassName]);

  BindSourceDB := TBindSourceDB.Create(Control);
  BindSourceDB.Name := DataName + '_BindSource';
  BindSourceDB.DataSet := DataSet;
  BindSourceDB.DataSet.Active := True;
  BindSourceDB.DataSource.Enabled := True;

  BindingsList := TBindingsList.Create(BindSourceDB);
  BindingsList.Name := DataName + '_BindingsList';

  if Control is TCombobox then
  Begin
    LinkListControl := TLinkListControlToField.Create(BindingsList);
    LinkListControl.Name := DataName + '_LinkListControl';
    LinkListControl.Control := Control;
    LinkListControl.DataSource := BindSourceDB;
    LinkListControl.FieldName := FieldName;
    LinkListControl.Active := True;
  end
  else
  Begin
    LinkControl := TLinkControlToField.Create(BindingsList);
    LinkControl.Name := DataName + '_LinkListControl';
    LinkControl.Control := Control;
    LinkControl.DataSource := BindSourceDB;
    LinkControl.FieldName := FieldName;
    LinkControl.Active := True;
  End;
end;
Hat da vielleicht jemand eine Idee was ich Falsch mache? oder ist das ein generelles Problem von FMX mit iOS?
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 30. Nov 2017, 13:07
Sind LiveBindings nicht faktisch tot? Miese Performance, recht buggy und am Ende nur für Projekte mit einer Komplexität knapp oberhalb von "Hello world" - also den Standard-Emba Demos geeignet. Lass lieber die Finger davon.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 30. Nov 2017, 13:10
Meine gesamte app besteht aus Livebindings /.\ und das läuft eigentlich ganz gut... nur eben an dieser Stelle nicht.
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#4

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 30. Nov 2017, 17:25
Was passiert denn wenn du in der DB Daten manuell reinschreibst, ich nehme an mit FireDac ?

Geht das unter iOS denn sonst an anderer Stelle genauso, oder ist das jetzt ein generelles Problem ?
Könnte ja sein das da ein Commit fehlt vor dem Beenden ?
Würde ich mal generell ausprobieren bevor ich an den LiveBindings rumprobiere.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 1. Dez 2017, 07:43
Generell kann ich von der App aus normal in die DB reinschreiben (mache ich schon an einigen Stellen).
Nur eben an dieser Stelle mit den Dynamischen LiveBindings nicht.
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 1. Dez 2017, 08:17
iOS - bist du sicher?

Die ganzen Bindings und Listen, die du erzeugst, sollen doch nach dem Prozeduraufruf noch "weiterleben". Du machst das konzeptionell falsch - lokale Variable, die "außerhalb" weiter benutzt werden, ist problematischer Code.

Android und OSX haben unterschiedliche Speicherverwaltung, deshalb funktioniert das auf Android, weil die Objekte erst dann freigegeben werden, wenn keine Referenz mehr drauf ist. Unter OSX wird der Speicher freigegeben, sobald die Objekte out of scope sind.

"The Android, iOS and Linux compilers use ARC memory management for objects. The Windows and OSX compilers use the classic manual memory management, where ARC is supported only on interface references, not objects. On the other hand, FMX as a cross-platform framework, and uses different memory management systems, depending on which OS platform it runs on."
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 5. Dez 2017, 15:28
So, ich habe das ganze jetzt mal geändert, sodass hier keine Lokalen Variablen in der Prozedur mehr verwendet werden. Trotzdem werden die Daten über die Livebindings nicht gespeichert. Und bei der Eingabe eines Datums stürzt die App beim tippen auf "Fertig" im Datumsdialog ab.
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 5. Dez 2017, 16:36
Da stürzt nix ab, es gibt eine Exception und einen Callstack. Wenn du diese Informationen nutzt und möglichweise uns auch zur Verfügung stellst, dann findest du oder wir auch den Fehler.

P.S. Das hat nix mit ARC zu tun, denn all die Objekte sind von TComponent abgeleitet und ihnen wird ein Owner im Create mitgegeben, womit sie auch nach der Methode weiter leben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 5. Dez 2017 um 16:55 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 5. Dez 2017, 20:51
Das hat nix mit ARC zu tun, denn all die Objekte sind von TComponent abgeleitet und ihnen wird ein Owner im Create mitgegeben, womit sie auch nach der Methode weiter leben.
Echt jetzt?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: [FMX-iOS] dynamische Livebindings funktionieren teilweise

  Alt 5. Dez 2017, 22:07
Das hat nix mit ARC zu tun, denn all die Objekte sind von TComponent abgeleitet und ihnen wird ein Owner im Create mitgegeben, womit sie auch nach der Methode weiter leben.
Echt jetzt?
Ja, die Owner-Mechanik von TComponent führt dazu, dass sich da nix durch ARC auflöst, das ist der Hauptgrund für das unsägliche DisposeOf, was intern dafür sorgt, dass der Destruktor aufgerufen wird, obwohl RefCount der Instanz noch > 0 ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 5. Dez 2017 um 22:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz