Can i modify Root.plist in settings bundle dynamically?

Zaraki picture Zaraki · Aug 4, 2011 · Viewed 8k times · Source

I have a settings bundle in my app.. containing root.plist now i have a screen which contains a checkbox.. on pressing the check box i want to change the BOOL value for DefaultValue key of PSToggleSwitchSpecifier in the plist. Since its being done at runtime.. my question is that .. can the file be changed at runtime and if yes.. give an idea how to do it??

here is the plist:

    <plist version="1.0">
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>DefaultValue</key>
            <string></string>
            <key>Key</key>
            <string>Username</string>
            <key>Title</key>
            <string>Username</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
        <dict>
            <key>DefaultValue</key>
            <string></string>
            <key>IsSecure</key>
            <true/>
            <key>Key</key>
            <string>Password</string>
            <key>Title</key>
            <string>Password</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSToggleSwitchSpecifier</string>    <-----toggleSwitch
            <key>Title</key>
            <string>Remember</string>
            <key>Key</key>
            <string>CheckBox</string>
            <key>DefaultValue</key>    <----- Default Value
            <false/>                   <---- want to change this value 
        </dict>
    </array>
    <key>Title</key>
    <string>Settings</string>
</dict>
</plist>

thank you in advance ;)

Answer

user142019 picture user142019 · Aug 4, 2011

Because the settings bundle resides inside your app's bundle, you cannot change it at runtime, only at compile-time.

You can, however, use NSUserDefaults to set the value at runtime, and the settings application will automatically reflect this. It will be saved elsewhere, though. You can just read it back the same way as you would do with the settings bundle, also through NSUserDefaults.

Note that you shouldn't read from the settings bundle directly, as it makes no sense. You should always fetch and set user defaults using NSUserDefaults. When the user makes a change in the settings application, NSUserDefaults will reflect this automatically. They will always be kept in sync.