設定バンドルの子ペインに値を保存しようとしています。
私にはRoot.plist
子供がいますmoteurs.plist
にはmoteurs.plist
、14個のモーターがあり、モーターごとに2つの値(キャリブレーション係数)を保存したいと思います。これらの値は、ユーザーが変更できる必要があります。
Root.plist
私は持っています:
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Title</key>
<string>Moteurs</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>Paramètres moteurs</string>
<key>File</key>
<string>moteurs</string>
<key>Key</key>
<string>moteurs</string>
</dict>
<dict>
でmoteurs.plist
:
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Title</key>
<string>L5K-070</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>AutocapitalizationType</key>
<string>None</string>
<key>AutocorrectionType</key>
<string>No</string>
<key>DefaultValue</key>
<string>0,0</string>
<key>IsSecure</key>
<false/>
<key>Key</key>
<string>coeff1_preference</string>
<key>KeyboardType</key>
<string>Number Pad</string>
<key>Title</key>
<string>Coeff 1</string>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
</dict>
<dict>
<key>AutocapitalizationType</key>
<string>None</string>
<key>AutocorrectionType</key>
<string>No</string>
<key>DefaultValue</key>
<string>0,0</string>
<key>IsSecure</key>
<false/>
<key>Key</key>
<string>coeff2_preference</string>
<key>KeyboardType</key>
<string>Number Pad</string>
<key>Title</key>
<string>Coeff 2</string>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
</dict>
問題が発生しました:子のデフォルト値を初期化できません(または値の読み取り方法がわかりません)
ルートのデフォルト値は、次を使用して初期化されます。
- (void)registerDefaultsFromSettingsBundle {
[[NSUserDefaults standardUserDefaults] registerDefaults:[self defaultsFromPlistNamed:@"Root"]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (NSDictionary *)defaultsFromPlistNamed:(NSString *)plistName {
NSLog(@"Traitement de %@:",plistName);
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
NSAssert(settingsBundle, @"Could not find Settings.bundle while loading defaults.");
NSString *plistFullName = [NSString stringWithFormat:@"%@.plist", plistName];
NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:plistFullName]];
NSAssert1(settings, @"Could not load plist '%@' while loading defaults.", plistFullName);
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSAssert1(preferences, @"Could not find preferences entry in plist '%@' while loading defaults.", plistFullName);
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
id value = [prefSpecification objectForKey:@"DefaultValue"];
if(key && value) {
[defaults setObject:value forKey:key];
}
NSString *type = [prefSpecification objectForKey:@"Type"];
if ([type isEqualToString:@"PSChildPaneSpecifier"]) {
NSString *file = [prefSpecification objectForKey:@"File"];
NSAssert1(file, @"Unable to get child plist name from plist '%@'", plistFullName);
[defaults addEntriesFromDictionary:[self defaultsFromPlistNamed:file]];
}
}
return defaults;
}
を使用してルート設定値にアクセスできます
NSString *test = [[NSUserDefaults standardUserDefaults] stringForKey:@"serveur_preference"];
NSLog(@"serveur:%@",test);
では、子ペインの設定値を読み取るにはどうすればよいですか?そして、各モーターの2つの係数を保存するためのベストプラクティスは何ですか?
どうもありがとう。