2012-01-07 49 views
1

我有一個文件在從的appDelegate的appDidFinishLoading方法負載使用URL值,檢查一個應用程序,我理應店在NSUserDefaults的設置根的plist:NSUserDefaults的設置包的plist

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,我仍然得到設置plist默認值。我進入應用程序的設置(不知道我可以在模擬器中這樣做),然後我修改了url字段中的值,但是我仍然得到test2.xml值,它是設置根目錄中的默認佔位符值plist中。

這裏是plist中:Root.Plist

或者它是設置包不會在Xcode的模擬器工作?

回答

0

原來我錯過了這條線:

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

但這只是讀取默認值每一次發射。它不會將用戶修改的值保存在應用設置中。爲什麼這個價值不被保存?

1

您需要明確地保存它。例如,如果strFirstName是用戶修改的值,那麼您將其保存到應用設置

NSUserDefaults* ud = [NSUserDefaults standardUserDefaults]; 
[ud setObject:strFirstName forKey:kFirstNameKey]; 
[ud sychronize];