単一の設定値、デフォルト値のテキストフィールドを使用して設定バンドルを作成しました。
アプリケーションを起動して値を取得すると、nullになります。ユーザーが値を指定する前に、使用する値を手動でコーディングする必要がありますか?
また、ユーザーが設定画面に移動してテキストフィールドに入力し、変更せずにそのままにしておくと、値は設定されません...ユーザーは実際に値を変更して保存する必要がありますが、これは正しいですか?
単一の設定値、デフォルト値のテキストフィールドを使用して設定バンドルを作成しました。
アプリケーションを起動して値を取得すると、nullになります。ユーザーが値を指定する前に、使用する値を手動でコーディングする必要がありますか?
また、ユーザーが設定画面に移動してテキストフィールドに入力し、変更せずにそのままにしておくと、値は設定されません...ユーザーは実際に値を変更して保存する必要がありますが、これは正しいですか?
いいえ、そうしないでください。
これには関数があります:
id userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults registerDefaults: defaultSettings];
PreferenceSpecifiers
設定ファイルのすべてのサブキーを反復することで、パラメーターを作成できplist
ます。
このようなもの:
- (NSDictionary *)readDefaultSettingsFromPlist: (NSString *)inPath;
{
id mutable = [NSMutableDictionary dictionary];
id settings = [NSDictionary dictionaryWithContentsOfFile: inPath];
id specifiers = [settings objectForKey: @"PreferenceSpecifiers"];
for (id prefItem in specifiers) {
id key = [prefItem objectForKey: @"Key"];
id value = [prefItem objectForKey: @"DefaultValue"];
if ( key && value ) {
[mutable setObject: value
forKey: key];
}
}
return [NSDictionary dictionaryWithDictionary: mutable];
}
デフォルト値は設定アプリに表示されているようですが、NSUserDefaults standardUserDefaults に自動的に保存されません。したがって、nil 値を見つけた場合は、デフォルト値を明示的に設定する必要があります。
このようなもの:
+ (NSString *)userDefaultStringForKey:(NSString *)key defaultValue:(NSString *)def {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *val = [defaults stringForKey:key];
if (val == nil && def != nil) {
val = def;
[defaults setObject:val forKey:key];
}
return val;
}
キーに null を取得している場合は、アプリをチェックインして、独自のデフォルト値を使用できます。