2011-07-08 5 views
27

保存/復元のためのNSUserDefaultsを知っていますユーザーの設定があります。 アプリケーションの同等クラスは何ですか?たとえば、アプリケーションには「最終実行」フィールドがあります。アプリケーションレベルでの使用のための装置の固有の識別のためのフィールドを有することができる。iOSで(プライベート)アプリケーション設定を保存しますか?

私の意図は、アプリケーションの設定(ユーザの設定ではない)を設定アプリケーションから外して、iTunes、Time Machineなどの設定をバックアップしないことです。

iOS/iPhone/iPadではJavaとC#では多くのノイズが発生しますが、それほど多くはありません。

+0

iPhoneはOne Userオペレーティングシステムです。別のユーザー名でログインすることはできません。では、なぜユーザー設定とは異なるアプリケーション設定が必要なのでしょうか?または私は何かを逃していますか? – bartvdpoel

答えて

11

NSUserDefaultsで値を保存できる場合は、アプリケーションの設定も保存することをお勧めします。

またはプロジェクトにsettings.plistを追加し、(あなたが後で変更されていないものを)それを読ん

、あなたは次のように使用することができます。、

+ (NSDictionary*)getBundlePlist:(NSString *)plistName 
{ 
    NSString *errorDesc = nil; 
    NSPropertyListFormat format; 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
              propertyListFromData:plistXML 
              mutabilityOption:NSPropertyListMutableContainersAndLeaves   
              format:&format errorDescription:&errorDesc]; 
    return temp; 
} 

+ (id) getPropValue:(NSString *)PropertyName 
{ // I am supposing you had add your app preferences on settings.plist. 
    return [[Property getBundlePlist:@"settings"] objectForKey:PropertyName]; 
    //here Property is my class name, then you can use value by 
    //NSString *value = [Property getPropValue:@"setting1"]; 
} 
+0

また、配列や辞書にすべてを入れることができ、 'writeToFile:' – Greg

+0

を呼び出すことができます。あなたの解決策を理解しているので、アプリの実行後に保存されます。うーん、IDEのplistファイルに値を追加するように言っていた。 –

0

それはあなたが求めているものを言うのは難しいです。 NSUserDefaultsがあなたの探しているようですが、あなたはすでにあなたがそれを認識していると主張しています。あなたの問題は何ですか?

+0

デバイスでは、「最終実行」などの一部の項目が設定アプリケーションに表示されるべきではないため、バックアップしないでください。それらを非公開にする私の意図。 – jww

+7

@noloader NSUserDefaultsに何かを入れると、自動的に設定に表示されません**。設定に何かを表示させるには、設定バンドルをアプリに特別に追加し、その値を設定するキーを_specifically_追加する必要があります。何も自動的に表示されません。私は 'NSUserDefaults'を常に使用しています。私のアプリはSettingsバンドルを持っていないし、Settingsにも表示されません。 – Greg

70

NSUserDefaultsあなたが求めているものに使用できます。

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"shownPrompt"]) { 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"shownPrompt"]; 
    // Show your prompt or whatever 
} 

これは作業用のコードスニペットです。キーがfalseの場合はtrueに設定され、プロンプトが表示されます。次回このコードを実行すると、キーはすでにtrueになっているので、プロンプトは表示されません。

NSUserDefaultsは現在のデバイスの現在のアプリケーションに固有であり、キー値システムであるという点でNSMutableDictionaryに似ていますが、自分のインスタンスを生成する代わりに、アプリケーション全体に共通の共有インスタンスがありますアプリが終了すると消去されません。

NSUserDefaults等、何かが、最後の実行の日付を示されているかどうかのようなものを保存するのに最適ですこちらのドキュメントを読む:https://developer.apple.com/documentation/foundation/userdefaults

は、「ユーザー設定」部分によって延期されないでください。あなたは(それがあるか、基本的にNSStringNSDictionaryNSArrayNSNumberUITextFieldintfloatbool、などを意味し、<NSCoding>を実装NSObjectに変換できる限り)あなたが欲しいものを保存するためにそれを使用することができます。

NSUserDefaultsに入れるものはではありません。ではなく、設定アプリで自動的に表示されます。それは完全にプライベートに保たれ、隠されます。設定に何かを表示するには、設定バンドルをアプリに追加し、設定アプリに表示するすべての値のキーを手動で追加する必要があります。

+2

NightLeopard - 私はあなたに答えのクレジットを与えたいと思っていたでしょうが、できませんでした。私がすることができる最高のは、SOの親指です。 – jww

+1

ある時点で '[standardUserDefaults synchronize]'を呼び出して変更をコミットするようにしてください。 – bendytree

+1

@bendytreeアップルのドキュメントによると、このメソッドは定期的に自動的に呼び出されるため、自動同期(たとえば、アプリケーションが終了しようとしている)を待つことができない場合や、あなたが何も変更を加えていなくても、デフォルトではディスク上のものになります。 – Tom

関連する問題