Utilizzare un dizionario Plist per le impostazioni dell'app
-
05-07-2019 - |
Domanda
Voglio essere in grado di utilizzare un plist per le impostazioni che sto implementando nella mia app. Voglio un dizionario " Impostazioni " per conservare le mie matrici, come "Debug", "Opzione 1", Opzione 2 ", ecc. Come potrei accedere all'array" Debug "sotto la sezione" Impostazioni ". dizionario?
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPlistPath = [documentsDirectory stringByAppendingPathComponent:@"ProfileManager.plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:myPlistPath];
swDebug.on = [plistDict objectForKey:@"Debug"];
.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Current Profile</key>
<string>Sample Profile</string>
<key>Custom Profiles</key>
<array>
<dict>
<key>autolock</key>
<false/>
<key>bluetooth</key>
<false/>
<key>desc</key>
<string>Example profile provided by the application</string>
<key>edge</key>
<false/>
<key>phone</key>
<false/>
<key>push</key>
<false/>
<key>ringtone</key>
<string>Example.m4r</string>
<key>threeg</key>
<false/>
<key>title</key>
<string>Example Profile</string>
<key>vibrate</key>
<false/>
<key>wifi</key>
<false/>
</dict>
<dict>
<key>autolock</key>
<false/>
<key>bluetooth</key>
<false/>
<key>desc</key>
<string>Sample profile provided by the application</string>
<key>edge</key>
<false/>
<key>phone</key>
<false/>
<key>push</key>
<false/>
<key>ringtone</key>
<string>Sample.m4r</string>
<key>threeg</key>
<false/>
<key>title</key>
<string>Sample Profile</string>
<key>vibrate</key>
<false/>
<key>wifi</key>
<false/>
</dict>
</array>
<key>Settings</key>
<dict>
<key>Debug</key>
<string>ON</string>
</dict>
</dict>
</plist>
Soluzione
Nel tuo esempio il debug è una stringa, non un array (che è quello che sembra dire sia nella domanda). In entrambi i casi, il problema è che si sta accedendo alla chiave nel dict sbagliato. Hai:
swDebug.on = [plistDict objectForKey:@"Debug"];
Dovresti:
swDebug.on = [[plistDict objectForKey:@"Settings"] objectForKey:@"Debug"];
Dato che le impostazioni sono un dizionario all'interno del dizionario.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow