Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   XE5 / iOS / Einstellungen auslesen: ok bei iPhone4, freeze bei iPhone5 (https://www.delphipraxis.net/177697-xe5-ios-einstellungen-auslesen-ok-bei-iphone4-freeze-bei-iphone5.html)

moe120 21. Nov 2013 14:58

XE5 / iOS / Einstellungen auslesen: ok bei iPhone4, freeze bei iPhone5
 
Hallo,

ich lese in meiner App beim Starten zuvor gespeicherte Einstellungen (z.B. Serveradresse, Nutzername etc.) aus. Das klappt beim iPhone4 wunderbar und sogar im Simulator (wo der lokale Speicher für diese Werte jedoch ständig geleert wird), nicht jedoch beim iPhone5. Wäre über jeden Denkanstoss oder Alternativen (gern auch mit entsprechendem Code) dankbar.

hier der Code zum Auslesen (die doppelte Funktionsverschachtelung hab ich gemacht weil ich bei Embarcadero gelesen hab, dass ein try-catch bei iphones/ARM CPU's nur richtig funktioniert wenn nur EINE Funktion/Prozedur hinter Try steht, hat aber leider nichts gebracht, in das except läuft er gar nicht erst rein sondern freezt direkt)

Delphi-Quellcode:
{$IFDEF IOS}
function Read_string_setting(name: String): String;
var
  lDefaults: NSUserDefaults;
begin
  try
  lDefaults:= TNSUserDefaults.Wrap(TNSUserDefaults.OCClass.standardUserDefaults);
  Result:= UTF8ToString(lDefaults.stringForKey(NSStr(name)).UTF8String);
  except
  Result:= '';
  end;
end;
{$ENDIF}


procedure proc_read_server_address;
begin
I_server_Address:= Read_string_setting('server_address');
end;


function do_read_settings: Boolean;
begin

  //--read server_address
  Form2.Progressbar1.Value:= 10; Application.ProcessMessages; Sleep(50);
  try proc_read_server_address; // <- freeze hier bei iPhone5, ok bei iPhone4
  except I_server_Address:= ''; end;

  [...]

end;

vllt. seh ich ja auch den Wald vor lauter Bäumen nicht. Hatte erst den Debug-Schalter IOS im Verdacht aber das wär ja Quatsch, weil der ja nur zur Compilierzeit von Bedeutung ist.

Ich hab auch schon eine root.plist mit all denn "Variablen"-namen die ich abfragen/speichern möchte erzeugt und in Bereitstellung reingehängt aber ohne Ergebnis. (Beim iPhone4 brauch ich die gar nicht erst um mit dieser Funktion Werte auslesen zu können)


hier noch die Funktion zum Speichern der Settings / Aufruf analog:
Delphi-Quellcode:
{$IFDEF IOS}
function Save_string_setting(name: String; value: String): Boolean;
var
  lDefaults: NSUserDefaults;
begin
  try
  lDefaults := TNSUserDefaults.Wrap(TNSUserDefaults.OCClass.standardUserDefaults);
  lDefaults.setObject((NSStr(value) as ILocalObject).GetObjectID,
                       NSStr(name));
  Result:= true;
  except
  Result:= false;
  end;
end;
{$ENDIF}

mcbrab 9. Dez 2013 15:45

AW: XE5 / iOS / Einstellungen auslesen: ok bei iPhone4, freeze bei iPhone5
 
Hi.

Make sure the returned preference-string is not nil

Delphi-Quellcode:
function GetPreferenceItem( const APreference : string ) : string;
 var
  lDefaults : NSUserDefaults;
  val : NSString;
begin
  lDefaults := TNSUserDefaults.Wrap( TNSUserDefaults.OCClass.standardUserDefaults );
  try
    val := lDefaults.stringForKey( NSStr(APreference) );
    if val <> nil then
      result := UTF8ToString(val.UTF8String);
  except on e : exception do
    result := '';
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz