web-dev-qa-db-ja.com

iOSアプリケーション構成ファイル

C#アプリケーションでは、常にapp.configファイルを使用して、必要なときにアプリケーションがロードするデータを保存します(接続文字列など)。

このような情報をiOSアプリケーションに保存する最良の方法は何ですか?

33
António

プロパティリストファイルを作成できます(XCodeには、[ファイル]-> [新しいファイル]をクリックして選択するためのテンプレートがあります)。したがって、 "settings.plist"などを作成できます。 plistはキー=>値の設定ファイルであると考えることができますが、値としてプレーンテキスト以外に配列や辞書を保持することもできます。

NSBundleを使用して、次のようにアプリにファイルをロードします

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];

その後、通常の辞書としてキーにアクセスできます。 ;)の後に忘れずに[リリース]してください。

57
Rafael Steil

接続文字列のような小さなデータの場合、 NSUserDefaults を使用します。

接続文字列を保存するには、次のようにします。

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
                                          forKey:@"connectionString"];

ロードしたい場合は、次のようにします。

myConnectionString = [[NSUserDefaults standardUserDefaults] 
                          stringForKey:@"connectionString"];
10
Simon

構成要素の比較的単純なセットを保存するだけの場合は、単純に NSDictionary のシリアル化メソッドを使用できます(クラスドキュメントのメソッドディレクトリにリンクする方法がわかりません)。

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath];

NSMutableDictionary *settings = [NSMutableDictionary dictionary];
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath];
}

// writing settings
[settings writeToFile:settingsPath atomically:YES];

Objective-Cにどれだけ精通しているかわからないので、次の点にも注意してください。

4
Jeff

Swift with iOS 8.のiOSアプリケーション設定ファイル:

    let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")!
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)!

    // Usage example: Google Maps iOS SDK/API Configuration.
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String)
2
King-Wizard

Swift 3 Xcode 8に更新

「Sample.plist」という名前のプロジェクトに新しいプロパティリストを追加します。次に、次の例を参照してください。

    let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")!
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)!
    print(sampleConf.object(forKey: "test") as! String)
2
beatsbears

IOsでは、すべてのアプリに独自のサンドボックスがあり、そのアプリでのみ使用できます。そのため、そのファイルを読み取り専用にしたい場合は、アプリケーションバンドルに保存します。それ以外の場合は、アプリケーションフォルダーに保存します。

アプリケーションフォルダに直接アクセスできないため、そのフォルダにファイルを保存する場合は、プログラムで実行する必要があります。

2
iOSPawan

私はプロパティリストを使用して小さなデータを格納します-それらの使用方法についてはこちらをご覧ください:

http://iphoneincubator.com/blog/tag/nspropertylistserialization

1
TheEye

私はパーティーに遅れていることに気付きますが、このスタックオーバーフローを見つけた後、私は受け入れられた答えに落胆しましたので、私はそれを解決するために ポッド を作成しました!これは、@ RafaelSteilの answer のアイデアに基づいていますが、よりシンプルなインターフェースを持ち、読み込まれた設定データをキャッシュし、メインアプリでオーバーライドできる独自のデフォルトを提供するポッドをサポートします。私はそれが誰かを助けることを願っています。

0
rmeador