दिलचस्प पोस्ट
एक्सेस विनिर्देशक क्या हैं? क्या मुझे निजी, संरक्षित या सार्वजनिक से वारिस होना चाहिए? virtualenv में एक वातावरण चर सेट करना जावा में फ़ाइलचैनल का उपयोग करते हुए स्मृति मैप से एक फ़ाइल को कैसे अनमाप करें? एएसपी.नेट एमवीसी जेएसनआरसल्ट तिथि प्रारूप फ़ॉर्म रीडर से रोकें या सबमिट करने पर ताज़ा करें? JQuery के साथ गतिशील रूप से भरी हुई इनलाइन और / या बाह्य सीएसएस कैसे लागू करें मैं कैसे जांच सकता हूं कि एक अक्षर स्ट्रिंग में दिखाई देता है? MySQL "गलत स्ट्रिंग मान" त्रुटि जब Django में यूनिकोड स्ट्रिंग सहेजता है मैं जावास्क्रिप्ट के माध्यम से HTTP अनुरोध हेडर फ़ील्ड कैसे प्राप्त करूं? jquery html () स्क्रिप्ट टैग बाहर स्ट्रिप्स JavaScript में DOM नोड के सभी बच्चे तत्व निकालें जावा कुंजीलिस्टर एरो कुंजियों को दर्ज नहीं कर रहा है समान मूल नीति को दरकिनार करने के तरीके सीएसएस का उपयोग करके पाठ की लंबाई को एन लाइन पर सीमित करें .NET का उपयोग करते हुए 2 फाईल्स की तुलना कैसे करें?

UIColor को सहेज रहा है और NSUserDefaults से लोड हो रहा है

UIColor को NSUserDefaults में सहेजने का सबसे आसान तरीका क्या है और फिर उसे वापस प्राप्त करें?

वेब के समाधान से एकत्रित समाधान "UIColor को सहेज रहा है और NSUserDefaults से लोड हो रहा है"

स्वीकार किए जाते हैं उत्तर के साथ , आप जल्दी से एनएसकेईईईड अभिलेखागारों के साथ समाप्त हो जाएंगे और आपके कोड पर सभी का अपरिचित होना होगा। क्लीनर समाधान NSUserDefaults का विस्तार करना है यह वही है जो विस्तार के लिए हैं; NSUserDefaults शायद UIColor के बारे में नहीं जानते क्योंकि यह है क्योंकि UIKit और फाउंडेशन अलग-अलग फ़्रेमवर्क हैं

तीव्र

 extension NSUserDefaults { func colorForKey(key: String) -> UIColor? { var color: UIColor? if let colorData = dataForKey(key) { color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as? UIColor } return color } func setColor(color: UIColor?, forKey key: String) { var colorData: NSData? if let color = color { colorData = NSKeyedArchiver.archivedDataWithRootObject(color) } setObject(colorData, forKey: key) } } 

प्रयोग

 NSUserDefaults.standardUserDefaults().setColor(UIColor.whiteColor(), forKey: "white") let whiteColor = NSUserDefaults.standardUserDefaults().colorForKey("white") 

यह एक श्रेणी के साथ उद्देश्य-सी में भी किया जा सकता है।

मैंने स्विफ्ट फाइल को एक सार के रूप में जोड़ा है

ऐसा करने का एक तरीका यह संग्रह करने के लिए हो सकता है (जैसे एनस्कोलर के साथ, हालांकि मैंने इसका परीक्षण नहीं किया है):

 NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color]; [[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"]; 

और इसे वापस पाने के लिए:

 NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"]; UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData]; 

मुझे स्वयं का जवाब मिल गया है

बचाना

 const CGFloat *components = CGColorGetComponents(pColor.CGColor); NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setFloat:components[0] forKey:@"cr"]; [prefs setFloat:components[1] forKey:@"cg"]; [prefs setFloat:components[2] forKey:@"cb"]; [prefs setFloat:components[3] forKey:@"ca"]; 

भार

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; UIColor* tColor = [UIColor colorWithRed:[prefs floatForKey:@"cr"] green:[prefs floatForKey:@"cg"] blue:[prefs floatForKey:@"cb"] alpha:[prefs floatForKey:@"ca"]]; 

एरिका के UIColor श्रेणी के लिए धन्यवाद मैं वास्तव में वरीयताओं में 4 फ्लोट्स बचत नहीं पसंद करता था, और सिर्फ एक ही प्रविष्टि चाहता था।

तो एरिका की UIColor श्रेणी का उपयोग करके, मैं आरजीबी रंग को एक NSString से रूपांतरित करने में सक्षम था, जिसे वरीयताओं में सहेजा जा सकता है

 // Save a color NSString *theColorStr = [self.artistColor stringFromColor]; [[NSUserDefaults standardUserDefaults] setObject:theColorStr forKey:@"myColor"]; // Read a color NSString *theColorStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"]; if ([theColorStr length] > 0) { self.myColor = [UIColor colorWithString:theColorStr]; } else { self.myColor = [UIColor colorWithRed:88.0/255.0 green:151.0/255.0 blue:237.0/255.0 alpha:1.0]; } 

स्विफ्ट 3, UserDefaults एक्सटेंशन

 extension UserDefaults { internal func color(forKey key: String) -> UIColor? { guard let colorData = data(forKey: key) else { return nil } return NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor } internal func setColor(_ color: UIColor?, forKey key: String) { let colorData: Data? if let color = color { colorData = NSKeyedArchiver.archivedData(withRootObject: color) } else { colorData = nil } set(colorData, forKey: key) } } 

उदाहरण का उपयोग करें

 let colorKey = "favoriteColor" UserDefaults.standard.setColor(UIColor.red, forKey: colorKey) let favoriteColor = UserDefaults.standard.color(forKey: colorKey) print("favoriteColor is red: '\(favoriteColor == UIColor.red)'") 

यह उत्तर पिछले उत्तर पर आधारित है। यह स्विफ्ट 3 के लिए अपडेट किया गया है

मुझे उपयोगकर्ता डिफ़ॉल्ट में यूआईसीलर वस्तुओं की सरणी को संग्रहित करने की आवश्यकता है आइडिया, जैसा कि दूसरे उत्तर में कहा गया है, यूआईकलोल को डेटा में रूपांतरित करने और उस डेटा को सहेजना है। मैंने UIColor पर विस्तार किया है:

 extension UIColor { func data() -> Data { return NSKeyedArchiver.archivedData(withRootObject: self) } class func color(withData data: Data) -> UIColor? { return NSKeyedUnarchiver.unarchiveObject(with: data) as? UIColor } } 

उपयोग:

 fileprivate var savedColors: [UIColor]? { get { if let colorDataArray = UserDefaults.standard.array(forKey: Constants.savedColorsKey) as? [Data] { return colorDataArray.map { UIColor.color(withData: $0)! } } return nil } set { if let colorDataArray = newValue?.map({ $0.data() }) { UserDefaults.standard.set(colorDataArray, forKey: Constants.savedColorsKey) UserDefaults.standard.synchronize() } } } 

2 संपादित करें: मुझे लगता है कि इसका उत्तर मिला है। यूआईसीलोर को विस्तार देने पर एरिक सदुन के लेख देखें

संपादित करें: यह कोड एक UIColor ऑब्जेक्ट के लिए काम नहीं करता है। यकीन नहीं है कि क्यों…

यहां पर कुछ नज़रिया लेने के लिए कुछ कोड दिया गया है:

ऑब्जेक्ट को NSUserDefaults में सहेज रहा है:

  NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults]; [userDefaults setObject:someColorObject forKey:@"myColor"]; 

NSUserDefaults से ऑब्जेक्ट पढ़ना:

 NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults]; UIColor *someColor = (UIColor *)[userDefaults objectForKey:@"myColor"];