NSUserDefaults Настройки Bundle Plist - PullRequest
1 голос
/ 07 января 2012

У меня есть приложение, которое проверяет файл при загрузке из метода appDidFinishLoading appDelegate, используя значение URL-адреса, которое якобы хранится в корневом списке параметров NSUserDefaults:

NSString *pathStr = [[NSBundle mainBundle] bundlePath];
NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"];
NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"];
NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:finalPath];
NSArray *prefSpecifierArray = [settingsDict objectForKey:@"PreferenceSpecifiers"];

NSDictionary *prefItem;
for (prefItem in prefSpecifierArray){
    NSString *keyValueStr = [prefItem objectForKey:@"Key"];
    if ([keyValueStr isEqualToString:kFirstNameKey]){
        nsUserDefURL = [prefItem objectForKey:@"DefaultValue"];
    }
        if ([keyValueStr isEqualToString:kSecondNameKey]){
        NSLog(@"You are using local data:%@",[prefItem objectForKey:@"DefaultValue"]);
    }
}
NSLog(@" this is the url == %@", nsUserDefURL);

// since no default values have been set (i.e. no preferences file created), create it here     
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:nsUserDefURL,kFirstNameKey,@"YES",kSecondNameKey,nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];

с некоторой статичностью:

NSString *kFirstNameKey = @"url";
NSString *kSecondNameKey = @"Web DataSource";

Когда я NSLog nsUserDefURL, я все еще получаю значение по умолчанию в списке настроек.Я вошел в настройки для приложения (не знал, что смогу сделать это в симуляторе), и изменил значение в поле URL, но я ПОСТОЯННО получаю значение test2.xml, которое является значением заполнителя по умолчанию в корне настроекplist.

Вот plist: Root.Plist

Или пакет настроек не работает на симуляторе Xcode?

Ответы [ 2 ]

1 голос
/ 24 мая 2012

Вам нужно явно сохранить его.Например, если strFirstName - это значение, которое изменил пользователь, тогда вы сохраните его в настройках приложения на

 NSUserDefaults* ud = [NSUserDefaults standardUserDefaults];
 [ud setObject:strFirstName forKey:kFirstNameKey];
 [ud sychronize];
0 голосов
/ 11 января 2012

Оказывается, мне не хватало этой строки:

nsUserDefURL = [[NSUserDefaults standardUserDefaults] stringForKey:kFirstNameKey];  

Но это читает значение по умолчанию только при каждом запуске.Это не сохранит измененное пользователем значение в настройках приложения.Почему это значение не сохраняется?

...