2009-10-16 10 views
6

मैंने कोर डेटा मॉडल स्थापित किया है जहां मेरे पास दो ऑब्जेक्ट हैं, व्यक्ति और पता कहें। एक व्यक्ति का पता होता है, और एक पता कई लोगों से संबंधित हो सकता है। मैंने इसे मूल डेटा में मॉडल किया है (इसलिए एकल तीर व्यक्ति को इंगित करता है, जबकि एकल तीर पता पर जाता है)कोर डेटा कंक्रीट कक्षा के बजाय NSManagedObject देता है, लेकिन केवल उपयोग करते समय। एक्सेसर

मैंने तब उन वस्तुओं के लिए दो कक्षाएं बनाई हैं, और उन वर्गों में कुछ कस्टम तरीकों को लागू किया है। कोर डेटा मॉडल में मैंने कक्षाओं के नामों में प्रवेश किया है।

यदि मैं सीधे कोर डेटा से पता प्राप्त करता हूं, तो यह मुझे वास्तविक ठोस वर्ग देता है और मैं इसके पर अपने कस्टम तरीकों को कॉल कर सकता हूं।

यदि दूसरी ओर मैं एक व्यक्ति लाता हूं और व्यक्ति के माध्यम से पते तक पहुंचने का प्रयास करता हूं (उदाहरण: person.address) मैं एक एनएसएमएनेज ऑब्जेक्ट वापस प्राप्त करता हूं जो एक पता है (उदाहरण: मैं सभी मूल डेटा विशेषताओं को प्राप्त कर सकता हूं I इस पर सेट है) लेकिन यह मेरे कस्टम तरीकों का जवाब नहीं देता है, क्योंकि यह पते के बजाय एनएसएमएनेज ऑब्जेक्ट प्रकार है। क्या यह कोर डेटा की सीमा है या क्या मैं कुछ गलत कर रहा हूं? यदि यह एक सीमा है तो क्या कोई काम आसपास है?

+0

यह कोर डेटा सीमा नहीं है; आप निश्चित रूप से कुछ गलत कर रहे हैं। इसका मतलब क्या है "यह मेरे कस्टम तरीकों का जवाब नहीं देता है, क्योंकि यह पते के बजाय एनएसएमएनेज ऑब्जेक्ट प्रकार है"? क्या आपको एक चयनकर्ता अपवाद नहीं मिला है? क्या संकलक शिकायत करता है? हमें कुछ कोड और आउटपुट दिखाएं या समस्या का निदान करना मुश्किल होगा। –

+0

तो यह एक रनटाइम त्रुटि है (एक कंपाइलर नहीं), एनएसएएनएजेडऑब्जेक्ट के बारे में मेरी कस्टम विधि के नाम का जवाब नहीं दे रहा है। जब आप कोर डेटा मॉडेलर में अपनी कक्षा का नाम निर्दिष्ट नहीं करते हैं तो आपको वही त्रुटि मिलती है। – rustyshelf

उत्तर

9

क्या आपने मॉडेलर का उपयोग करके उन वर्गों को बनाया है (एक इकाई, फ़ाइल> नई फ़ाइल .., प्रबंधित ऑब्जेक्ट क्लास का चयन करें, फिर मॉडल इकाई का चयन करें)?

कुछ समय पहले मुझे एक ही समस्या थी क्योंकि मैंने मॉडेलर का उपयोग करके अपने प्रबंधित ऑब्जेक्ट मॉडल नहीं बनाए थे। मैंने यह सुनिश्चित करने के लिए क्या किया कि सबकुछ ऊपर और चल रहा था, मेरी कस्टम विधियों की प्रतिलिपि बनाना और सहेजना था (और जो कुछ भी मैंने लागू किया था) और मॉडेलर का उपयोग करके स्क्रैच से शुरू करना था। तब मैं फिर से अपने मॉडल कक्षाओं को अनुकूलित करने में सक्षम था और सबकुछ ठीक काम करता था।

मुझे पता है कि यह एक पूर्ण उत्तर नहीं है, लेकिन शायद यह आपकी मदद कर सकता है जब तक कोई बताता है कि क्या हो रहा है।

चीयर्स!

+0

टिप के लिए धन्यवाद, मैंने कोशिश की कि केवल एक इकाई पर, लेकिन मैं इसे सभी के लिए करूँगा और देख सकता हूं कि इससे कोई फर्क पड़ता है – rustyshelf

+0

यह काम करता है! मैंने उन्हें मॉडल से सभी को फिर से बनाया, मेरे कस्टम कोड को वापस जोड़ा और बीएएम यह खुश था। अजीब।मैं वास्तव में उत्पन्न किए गए अतिरिक्त तरीकों के अलावा कोई स्पष्ट अंतर नहीं देख सकता हूं, जो मेरे पास नहीं था ... – rustyshelf

6

आप इकाई बनाते समय मॉडल में कक्षा का नाम सेट करना भूल गए थे - यह एनएसएमएनेज ऑब्जेक्ट पर डिफ़ॉल्ट है। मॉडेलर में व्यक्ति और पता पर क्लिक करें और जांचें, जहां तक ​​इकाई गुण सूचीबद्ध हैं, दूर दाएं किनारे पर, क्लास फ़ील्ड संबंधित उद्देश्य सी वर्ग के नाम से सही ढंग से भर चुका है और केवल डिफ़ॉल्ट NSManagedObject सेटिंग नहीं है।

+0

नहीं, मैंने निश्चित रूप से उन सभी को सेट कर दिया है, इसलिए यह क्यों काम करता है यदि मैं उस प्रकार का ऑब्जेक्ट सीधे मूल डेटा से प्राप्त करता हूं – rustyshelf

+0

दरअसल, किसी ऑब्जेक्ट को लाने से यह काम करेगा कि इकाई का वर्ग NSManagerObject पर सेट है या नहीं। लेकिन, जैसा कि @Terry Longrie बताता है, एक प्रबंधित ऑब्जेक्ट के कस्टम तरीकों के लिए, इकाई की कक्षा स्पष्ट रूप से व्यक्ति या पते या जो भी हो, पर सेट की जानी चाहिए। जब आप मॉडलर का उपयोग करते हुए कस्टम क्लास बनाते हैं तो @Lio सुझाव दिया जाता है, यह स्वचालित रूप से आपके लिए किया जाता है। जब आप हाथ से कस्टम क्लास बनाते हैं, तो बोलने के लिए, आपको कक्षा को भी हाथ से निर्दिष्ट करने की आवश्यकता होती है। मेरे जीवन के कुछ घंटों को बर्बाद कर दिया। –

1

कक्षा के लिए आपकी कार्यान्वयन फ़ाइल शायद आपके द्वारा चलाए जा रहे लक्ष्य में शामिल नहीं की गई है।

-, (मीटर फ़ाइल पर जानकारी प्राप्त करें> लक्ष्य टैब की जाँच करें)

अपने xcdatamodel कक्षा सेट है, तो अगर यह यह रन समय यह अभी भी काम करेगा पर नहीं मिल रहा है, तो आप सिर्फ मिल जाएगा इसके बजाय वापस NSManagedObject उदाहरण। जो वास्तव में ठीक काम करेगा, जब तक आप कक्षा में एक और विधि जोड़ने की कोशिश नहीं करते, जैसा कि आपने पाया है।

+0

यह मेरे मामले में समस्या थी – Jan

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