2012-02-09 10 views
35

में यह हो रही है मैं NSUserDefaults में NSArray बचा सकता है और फिर इसे एक NSMutableArray में वापस लोड UIPickerView पॉप्युलेट करने के लिए कैसे?NSUserDefaults को सहेजा जा रहा है NSArray और NSMutableArray

भी मुद्दा यह है कि नए मूल्यों है कि NSMutableArray में जोड़ा जाएगा और फिर उस सरणी NSUserDefaults में बचाया जा NSArray में परिवर्तित हो जाएगा (जैसा कि NSMutableArrayNSUserDefaults में सहेजा नहीं जा सकता) है।

सराहना की कोई मदद ..

धन्यवाद

+1

'NSMutableArray' संग्रहित किया जा सकता है, क्योंकि यह' NSArray' के गुणों को विरासत में:

आप की तरह इस विधि कॉल कर सकते हैं। – Ilanchezhian

उत्तर

105
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"]; 

एक परिवर्तनीय सरणी को संग्रहीत किया जा सकता है क्योंकि यह एनएसएआरएआरई का उप-वर्ग है।

NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]]; 

या

NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy]; 
+0

थैंक्स विग्नेश, लेकिन अगर कुछ स्ट्रिंग मान बदल दिया गया है जैसे कि "एक सड़क" सरणी में कोई मान है और इसे "सड़क पर अब" के रूप में अपडेट किया जाता है, तो हम इसे कैसे संभाल सकते हैं, ताकि एक ही स्ट्रिंग nsuserdefaults में भी अपडेट किया जाएगा, क्योंकि अगली बार नई अपडेटेड सरणी पिकर व्यू में पॉप्युलेट की जाएगी। क्या यह संभव है –

+0

@illoGicalError। आपका स्वागत है। आपको संशोधित सरणी के साथ अपने NSUserDefaults को अपडेट करना होगा। आप कोड की पहली पंक्ति का उपयोग करके अद्यतन सरणी स्टोर कर सकते हैं। – Vignesh

+0

क्या यह है? कोई archieving, आदि भी सरणी जटिल वस्तुओं हो सकता है? किस तरह की वस्तुओं को संग्रहीत किया जा सकता है? –

2

NSUserDefaults से NSArray उबरने के बाद प्राप्त NSMutableArray[[NSMutableArray alloc] initWithArray:] का उपयोग कर उदाहरण।

4

NSMutableArray को NSArray से बदलने के लिए::

[array mutableCopy]; 

NSMutableArray से परिवर्तित करने के लिए NSArray करने के लिए:

एक NSMutableArray के रूप में मूल्य प्राप्त करने के लिए

[NSArray arrayWithArray:array]; 

संपादित करें: mutableCopy को बाद में रिलीज़ की आवश्यकता होगी, क्योंकि यह copy है।

+0

भी परिवर्तनीय को गैर-परिवर्तनीय रूपांतरित करने के लिए आप कर सकते हैं: [mutableArray copy]; – quarac

9
// Store it 
    [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

// Read it back 
    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]]; 
2

इस सवाल के रूप में कई नए iOS डेवलपर्स द्वारा देखा जा रहा है। मैं नौसिखिया की मदद के लिए और जोड़ना चाहता हूं।

-(void)arraysFunction:(NSArray*)array mutArray:(NSMutableArray*)mArray{ 

    if (array == nil || [array count] == 0) { 

     [[NSUserDefaults standardUserDefaults] setObject:mArray forKey:@"mutableArray"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     NSLog(@"Mutable Array: %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"mutableArray"]); 

     NSArray * simpleArray = [ NSArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"mutableArray"]]; 

     NSLog(@"Simple Array: %@", simpleArray); 
    } 
    else{ 

     [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"array"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     NSLog(@"Simple Array: %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"array"]); 

     NSMutableArray * mutableArray = [NSMutableArray arrayWithArray:[[[NSUserDefaults standardUserDefaults] objectForKey:@"array"] mutableCopy]]; 

     NSLog(@"Mutable Array: %@", mutableArray); 
    } 
} 

मुझे आशा है कि यह आप NSUserDefaults में NSArray को बचाने के लिए मदद मिलेगी और उसके बाद के रूप में NSMutableArray ठीक इसके विपरीत यह पुन: प्राप्त करने।

NSArray * array = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil]; 
    NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"D", @"E", @"F", nil]; 

    [self arraysFunction:array mutArray:nil]; 
    [self arraysFunction:nil mutArray:mutableArray]; 
संबंधित मुद्दे