2011-06-13 46 views
1

我正在做一個項目,我必須在settings.bundle中檢索一些值。爲此,我必須以這種方式檢索默認值。 我訪問它作爲下如何從settings.bundle訪問值?

但是,當我嘗試打印stringObject

NSLog(@"%@",stringObject); 

然後,它總是打印空。 我已經使用鍵「Key_Value」在settings.bundle中保存了一個字符串值。但它返回空值。

告訴我哪裏做錯了

+6

可能重複[如何檢索目標C settings.bundle值?(http://stackoverflow.com/questions/6291477/how-to -retrieve-values-from-settings-bundle-in-objective-c) – Vladimir 2011-06-13 09:40:26

+0

請發佈代碼以顯示如何設置初始值。另外,請記住在設置值後同步UserDefaults。 – 2013-04-29 18:51:00

回答

2

檢查已存儲你這樣看重: -

NSUserDefaults *pref3=[NSUserDefaults standardUserDefaults]; 
    [pref3 setObject:*yourstring* forKey:@"Key_Value"]; 
    [NSUserDefaults resetStandardUserDefaults]; 

您retreiving的代碼是correct.make肯定stringObject是NSString的類型。

+0

@sanchitsingh我很想知道你的問題是否已經整理出來。 – Gypsa 2011-06-13 10:42:37

+0

我認爲你誤解了這個問題。他將數據存儲在Settings.bundle [這裏](http://stackoverflow.com/questions/6291477/how-to-retrieve-values-from-settings-bundle-in-objective-c),你可以找出什麼是正確答案 – 2015-10-22 14:20:39

0

調用此函數能夠解決您的問題

- (void)registerDefaultsFromSettingsBundle { 
    // this function writes default settings as settings 
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
    if(!settingsBundle) { 
     NSLog(@"Could not find Settings.bundle"); 
     return; 
    } 

    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]]; 
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"]; 

    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]]; 
    for(NSDictionary *prefSpecification in preferences) { 
    NSString *key = [prefSpecification objectForKey:@"Key"]; 
    if(key) { 
     [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; 
     NSLog(@"writing as default %@ to the key %@",[prefSpecification objectForKey:@"DefaultValue"],key); 
    } 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; 

}