Delphi XE4 FireMonkeyでiPadのアプリを作成しています。
iPadのローカルデータに書き込んだり、読み込んだりする方法を教えて下さい。
INIファイルやレジストリ、環境変数のようなデータがあると思うのですが、
そのデータに対して値の書き込み、読み込みを行いたいです
。
そのようなデータがあって、書き込み、読み込みできることは知っているのですが、その為のクラス、メソッドが探し出せなくて困っています。
よろしくお願いいたします。
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
結果を報告してもらえると皆の参考になると思いますので、ぜひぜひよろしくお願いします。
都合によりハンドルを変えました。
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
どうなったのかな…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が使えるということ??
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とサンプルプロジェクトは実際に見てみました。
最終的にはこれでやって行きたいと思いました。
報告遅くなった上に、大した報告ができなくで申し訳ございません。
ありがとうございました。
すみません。
書き忘れと修正です。
procedure setUserDefaults;
begin
Userdefaults.setInteger(1234, NSSTR('TestKey'));
Userdefaults.synchronize; //即時で保存してくれるようです。
end;
ツイート | ![]() |