2011-01-01 13 views
18

मेरे पास सीसीटीएमएक्सलेयर से CGPoints का एक गुच्छा है, मैं NSUserDefaults को सहेजना चाहता हूं लेकिन ऐसा करने का एक शानदार तरीका नहीं लग रहा है।NSUserDefaults का उपयोग कर CGPoints की सूची सहेजें

मूल रूप से मैं कई NSValues ​​(valueWithCGPoint) युक्त एक मूल्य के लिए एक NSMutableSet साथ एक NSDictionary को बचाने के लिए उम्मीद कर रहा था। जो मैं कह सकता हूं उससे न तो एनएसएमयूटेबलसेट या NSValue NSUserDefaults द्वारा समर्थित है।

इस बिंदु पर मैं एक स्ट्रिंग के रूप में CGPoint के x & y मानों को सहेजने पर विचार कर रहा हूं और आवश्यकतानुसार इसे आगे और पीछे परिवर्तित कर रहा हूं।

+0

क्या आपने अभी एक फ़ाइल में NSKeyedArchiver का उपयोग करने पर विचार किया है? (NSUserDefaults का उपयोग करने के बजाय।) –

उत्तर

46

कार्यों NSStringFromCGPoint और CGPointFromString की एक जोड़ी मौजूद है। आप इन्हें क्रमबद्ध करने के लिए बिंदुओं का प्रतिनिधित्व करने वाले तारों की एक सरणी बनाने के लिए उपयोग कर सकते हैं, और फिर समाप्त होने पर वापस कन्वर्ट कर सकते हैं।

+0

उल्लेखनीय! मुझे नहीं पता था कि ये कार्य मौजूद हैं। हमेशा उद्देश्य-सी के नए पहलुओं को ढूंढना। –

1

उन्हें NSValue ऑब्जेक्ट्स में बॉक्स करें। एक बार जब वे वहां हों, तो आप डिस्क पर NSValues लिख सकते हैं (क्योंकि वे <NSCoding> के अनुरूप हैं) या उन्हें NSUserDefaults या जो भी हो।

+0

यह मेरी समस्या है। मैं NSUserDefaults का उपयोग करते हुए एनएसवीएलयूएस के एनएसएआरएआरई (या एनएसएसईटी ... दोनों की कोशिश की है) को स्टोर करने की कोशिश कर रहा हूं लेकिन एक त्रुटि प्राप्त करते रहें: [NSUserDefaults setObject: forKey:]: गैर-संपत्ति मान –

+0

सम्मिलित करने का प्रयास संपत्ति सूचियों का उपयोग नहीं करते । NSValue वस्तुओं को plists पर लिखा नहीं जा सकता है। –

+0

ओह दुह, क्षमा करें। हां, आपको 'NSValues' को' NSDatas' में परिवर्तित करने के लिए 'NSKeyedArchiver' का उपयोग करना होगा (या 'एनएसएआरएआरए' को 'NSData' में) –

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