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}