2011-03-30 19 views
8

मैंने एक सेटिंग्स.बंडल बनाया है जो रूट.प्लिस्ट फ़ाइल और स्थानीयकरण निर्देशिका en.lproj के साथ आया है।आईफोन - पढ़ना सेटिंग। बंडल गलत मान देता है

मैंने रूट.प्लिस्ट संपादित किया है और मेरे ऐप के लिए कई सेटिंग्स जोड़ना चाहते हैं।

जब मैं आईफोन से ऐप हटाता हूं और इसे इंस्टॉल करता हूं और पहली बार चलाता हूं, तो मैंने जो भी सेटिंग्स पढ़ी हैं, वे गलत मान लौटते हैं। उदाहरण के लिए:

highQualityFlag = [[[NSUserDefaults standardUserDefaults] stringForKey:@"qualityFlag"] boolValue]; 

ध्वज NO के रूप में आता है, भले ही सेटिंग डिफ़ॉल्ट है हाँ।

अगर मैं सेटिंग्स पर कुछ बदल सकते हैं और फिर से चलाने के लिए, बाद के सभी रन मुझे सही मान (??)

मुझे लगता है कि कैसे हल करते दे सकता है?

धन्यवाद

+0

यह से अलग है [[NSUserDefaults standardUserDefaults] boolForKey: @ "qualityFlag"]; ?? – 0x8badf00d

+0

मैंने आपके सुझाव के साथ प्रतिस्थापित किया है ... बिल्कुल कोई बदलाव नहीं। मान समान गलत मान जारी रखते हैं। – SpaceDog

उत्तर

24

इस प्रयास करें:

- (void)registerDefaultsFromSettingsBundle 
{ 
    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]; 
     } 
    } 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; 
    [defaultsToRegister release]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    [self registerDefaultsFromSettingsBundle]; 

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     [window makeKeyAndVisible]; 
    return YES; 
} 
+0

YESSSSSSSSSSSSSSSSSSSS !!!!!!!!!!!!!!!!!!!!!!! बस एक छोटा सा सवाल: क्या मुझे [self registerDefaultsFromSettingsBundle] जोड़ने की ज़रूरत है; आवेदन करने के लिए DidBecomeActive या applicationWillEnterForeground? – SpaceDog

+0

अनुवर्ती प्रश्न: मैंने यह प्रश्न पोस्ट किया: http://stackoverflow.com/questions/8766979/nsuserdefaults-settings-bundle-plist जहां मैं मूल रूप से उपयोगकर्ता को ऐप में उपयोग करने के लिए एक यूआरएल मान दर्ज करना चाहता हूं। अभी तक उपयोगकर्ता इसे दर्ज कर सकता है और इसे सहेजा जा सकता है, लेकिन ऐप लॉन्च होने पर इसे वापस नहीं पढ़ा जाता है। इसके बजाय प्लिस्ट में हार्डकोड किए गए डिफ़ॉल्ट मान को पढ़ा जाता है। क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं। ऐप अभी भी डिफ़ॉल्ट प्लेसहोल्डर मूल्य क्यों पढ़ रहा है? – marciokoko

+0

@marciokoko आपको अंततः आपकी समस्या का समाधान मिला। मैं इसका सामना कर रहा हूँ! – pnizzle

संबंधित मुद्दे