2011-09-27 6 views
8

साथ एक सरणी की दुकान मैं तो NSUserDefault साथ एक सरणी स्टोर करने के लिए, चाहता हूँ, मुझे applicationDidEnterBackgroundआईओएस: NSUserDefault

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

में डाल दिया और application didFinishLaunchingWithOption

myArray= [[NSMutableArray alloc] 
      initWithArray:[[NSUserDefaults standardUserDefaults] 
      objectForKey:@"myArray"]]; 

में यह डिवाइस मल्टीटास्किंग के लिए ठीक है, लेकिन के लिए मल्टीटास्किंग डिवाइस नहीं, मैं कैसे हल कर सकता हूं?

उत्तर

10

स्टोर -applicationWillTerminate: में NSUserDefaults में वस्तु, यह पहले से ही -applicationDidEnterBackground: के आह्वान से सहेजा नहीं गया है, तो कर दिया गया (यानी जाँच लें कि मल्टीटास्किंग समर्थित है, अगर ऐसा है, तो यह है क्योंकि यह पहले से ही बचाया गया है को बचाने नहीं है।)

- (void) applicationWillTerminate:(UIApplication *) app { 
    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] && 
     ![[UIDevice currentDevice] isMultitaskingSupported]) { 
     [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 
    } 
} 
+0

जैसा कि किसी अन्य उत्तर में बताया गया है, आपको ऑब्जेक्ट को सेट करने के बाद डिफ़ॉल्ट को सिंक्रनाइज़ करने की आवश्यकता है। [[NSUserDefaults standardUserDefaults] सिंक्रनाइज़ करें]; – user3246173

0

सहेजें NSUserDefaults

- (void)applicationWillTerminate:(UIApplication *)application 
0

पर सेट

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

applicationWillTerminate 
3

पिछले जवाब में सभी सही हैं, लेकिन ध्यान रखें कि न applicationDidEnterBackground है और न ही applicationWillTerminate सभी स्थितियों में कहा जाने की गारंटी है। जब भी यह बदल जाता है तो आप आमतौर पर महत्वपूर्ण डेटा संग्रहीत करने से बेहतर होते हैं।

7

पृष्ठभूमि में जाने से पहले बफर सिंक करने के लिए मत भूलना:

[[NSUserDefaults standardUserDefaults] synchronize]; 
0

और encodeWithCoder और initWithCoder उद्देश्य यह है कि आप को बचाने के लिए कोशिश कर रहे हैं अंदर उपयोग करने के लिए मत भूलना और उस सरणी में निहित है