दिलचस्प पोस्ट
ऐप बंद होने पर पुश नोटिफिकेशन गतिशील चौड़ाई (सीएसएस द्रव लेआउट) के बराबर ऊंचाई सी ++ 11 की श्रेणी-आधारित उपयोग करने का सही तरीका क्या है? WPF / C # के साथ IE WebBrowser नियंत्रण के बजाय क्रोमियम एम्बेड करने के लिए विकल्प जावा ईई वेब अनुप्रयोग में वेब-आईएनएफ क्या इस्तेमाल किया जाता है? मूल्य scanf फ़ंक्शन द्वारा c में लौट आए Assembly.GetTypes () को कॉल करते समय ReflectionTypeLoadException को रोकने के लिए कैसे करें एंड्रॉइड डिवाइस पर सॉफ़्टवेयर कीबोर्ड दृश्यमान है, तो मैं यह कैसे पता लगाऊँ? एचटीएमएल 5 कैनवास में क्रॉस-मूल डेटा एक दृश्य के अंदर UIButton जिसमें एक UITapGestureRecognizer है सह-घटना मैट्रिक्स बनाना पायथन स्ट्रिंग में HTML संस्थाओं को डिकोड करें? जब उपयोगकर्ता इसके बाहर क्लिक करता है तो एक DIV छिपाने के लिए jQuery का उपयोग करें डायरेक्टिव से नियंत्रक तक एक AngularJS स्कोप चर को पारित करने का सबसे आसान तरीका? PHP के लिए सबसे अच्छा आईडीई क्या है?

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"];