iosのローカルデータを書き込む、読み込むには

解決


AiAidesAn  2013-06-06 21:52:26  No: 44639

Delphi XE4 FireMonkeyでiPadのアプリを作成しています。

iPadのローカルデータに書き込んだり、読み込んだりする方法を教えて下さい。

INIファイルやレジストリ、環境変数のようなデータがあると思うのですが、
そのデータに対して値の書き込み、読み込みを行いたいです

そのようなデータがあって、書き込み、読み込みできることは知っているのですが、その為のクラス、メソッドが探し出せなくて困っています。
よろしくお願いいたします。


Harry(助監督から改名)  2013-06-07 08:24:08  No: 44640

iOSはおろかXE4も見たことが無いのですが、お困りのようですので首を突っ込みます。

検索するとNSUserDefaultsクラス、NSDictionaryクラス、NSMutableDictionaryクラスなどが
ありましたが、かなりちんぷんかんぷんです。
NSUserDefaults - iPhoneアプリ開発の虎の巻
http://iphone-tora.sakura.ne.jp/nsuserdefaults.html

もう少し調べますと、エンバカデロの方にそれらしき記事(英語)が。
Persisting Settings in Delphi iOS Applications - EDN
http://edn.embarcadero.com/article/43065

記事ページの下の方では、上記の難解クラスをラップしたTUserIniFileが紹介されています。
しかもXE4ならサンプルとしてインストールされてるはず、とかなんとか。
C:\Users\Public\Documents\RAD Studio\11.0\Samples\Delphi\RTL\CrossPlatform Utils\Apple.IniFiles.pas

Apple.Inifiles.pasとサンプルプロジェクトはこちらにもあります。
ID: 29400, Sample code for Persisting Settings in iOS article - EDN CodeCentral
http://cc.embarcadero.com/item/29400

結果を報告してもらえると皆の参考になると思いますので、ぜひぜひよろしくお願いします。


Harry  2013-06-07 08:34:23  No: 44641

都合によりハンドルを変えました。
type
  Harry = type 助監督;
ということでひとつ…今後ともよろしくお願いします。

-------------------------------------------------------------------------------
#しかしTUserIniFile、CreateしっぱなしでFreeが無いとは、まさに未体験ゾーン…。

>クラス、インターフェイス、文字列、動的配列に対して自動参照カウントがデフォルトで有効になっています。
Delphi XE4 および C++Builder XE4 の新機能 - Delphi コンパイラの変更点 - Embarcadero DocWiki
http://docwiki.embarcadero.com/RADStudio/XE4/ja/Delphi_XE4_%E3%81%8A%E3%82%88%E3%81%B3_C%2B%2BBuilder_XE4_%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD#XE4_.E3.81.A7.E3.81.AE_Delphi_.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.A9.E3.81.AE.E5.A4.89.E6.9B.B4.E7.82.B9


Harry  2013-06-12 08:20:17  No: 44642

どうなったのかな…URLを1つ書き忘れていたので、追加しておきます

TIniFileの代替となる前述のTUserIniFileの他、XE2でMacOSXの「Preferences API」を使った
TMacPreferencesIniFile(iOSでは試していないとのこと)が紹介されています。

How to store application settings? - Embarcadero Discussion Forums » Delphi » FireMonkey
https://forums.embarcadero.com/thread.jspa?threadID=87068

>TIniFile maps to TMemIniFile on non-Windows platforms.
この一文が気になるのですが、普通にTMemIniFileが使えるということ??


AiAidesAn  2013-06-14 01:48:44  No: 44643

Harry 様

質問した内容以外で色々とはまってしまいまして、時間がかかりました。
NSUserDefaultsを使って基本的なことは出来ました。と思っています。
ありがとうございます。

uses iOSapi.Foundation;

var
  UserDefaults: NSUserDefaults;

  Userdefaults := TNSUserDefaults.Wrap(TNSUserDefaults.OCClass.standardUserDefaults);

procedure setUserDefaults;
begin
  userdefaults.setInteger(1234, NSSTR('TestKey'));
end;

procedure getUserDefaults;
begin
  Edit1.Text := IntToStr(Userdefaults.integerForKey(NSSTR('TestKey'))); 
end;

で、出来ました。

xcodeで見たら、「アプリ名.plist」が出来ました。
ここに値が入っていると思ってます。

Apple.Inifiles.pasとサンプルプロジェクトは実際に見てみました。
最終的にはこれでやって行きたいと思いました。

報告遅くなった上に、大した報告ができなくで申し訳ございません。

ありがとうございました。


AiAidesAn  2013-06-14 01:55:55  No: 44644

すみません。
書き忘れと修正です。

procedure setUserDefaults;
begin
  Userdefaults.setInteger(1234, NSSTR('TestKey'));
  Userdefaults.synchronize; //即時で保存してくれるようです。
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加