2015-01-01 6 views
5

मेरे पास एक NSManagedObject है। जब मैं एक उदाहरण बनाता हूं, तो यह अप्रत्याशित रूप से isKindOfClass विधि को विफल करता है।NSManagedObject विफल रहा है KindOfClass परीक्षण

NSEntityDescription *entity = [NSEntityDescription entityForName:@"DayModel" inManagedObjectContext:context]; 
DayModel *day = [[DayModel alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; 

if ([day isKindOfClass:[DayModel class]]) { 
    NSLog(@"True"); 
} else { 
    NSLog(@"False"); 
} 

आउटपुट:

False 

मैं निम्नलिखित कोड कहा:

Class objectClass = [day class]; 
Class classClass = [DayModel class]; 

और यह डीबगर में इसे देख मैं क्या पाया है:

enter image description here

classClass प्रिंट का विवरण प्रिंटिंग "डेमोडेल"।

मुझे यकीन नहीं है कि यह प्रासंगिक है, लेकिन स्विफ्ट में डेमोडेल लागू किया गया है।


अद्यतन

यह iOS एप्लिकेशन में अपने परीक्षण कक्षा में विफल हो रहा है, लेकिन नहीं। समस्या this issue के समान प्रतीत होती है। हालांकि, मैंने परीक्षण लक्ष्यों में किए गए सभी वर्गों को जोड़ा है और यह अभी भी असफल रहा है।

+1

सुनिश्चित नहीं हैं कि, लेकिन यह मदद कर सकता है ... http://stackoverflow.com/a/12161219/2274694 –

+0

धन्यवाद, मुझे लगता है कि यह करीब है।यह एक टेस्ट क्लास में असफल रहा है, लेकिन ऐप में काम कर रहा है। मैंने लक्ष्य के लिए सभी वर्गों को जोड़ा है हालांकि ... – rob

+0

मॉडल संपादक में, वर्ग का नाम xxx होना चाहिए। डेमोडेल जहां xxx आपके ऐप मॉड्यूल का नाम है। क्या यह मामला है? – jrturton

उत्तर

5

मुझे बस एक ही समस्या थी।

मेरे मामले में समस्या

वास्तव में नहीं था कि मैं परीक्षण परियोजना में स्रोत फ़ाइल याद आ रही थी के रूप में आप लिंक के साथ अपने अद्यतन में उल्लेख: के साथ की वजह से भी कई स्रोत फ़ाइलों isKindOfClass returning NO unexpectedly

मूल कारण था एक ही कक्षा। आपके परीक्षण लक्ष्य में आपके पास अपने लक्ष्य वाले लक्ष्य के लिए लक्ष्य निर्भरता हो सकती है, यानी आपके पास पहले से ही स्रोत फ़ाइल शामिल है।

इसलिए 'बिल्ड चरण' टैब में परीक्षण लक्ष्य के लिए 'कंपाइल स्रोत' से उपयोग की जाने वाली कक्षा वाली स्रोत फ़ाइल को निकालने के लिए सुनिश्चित करें।

(आपके मामले में हटाने DayModel.m)

मैं मेरी समस्या का हल मिला: isKindOfClass and NSStringFromClass disagree about UIApplicationDelegate

ऐसा लगता है जब एक ही कक्षा के साथ कई स्रोत फ़ाइलों होने isKindOfClass अजीब व्यवहार है, चूंकि यह दो वर्गों को समान नहीं देख सकता है।

+0

सुझाव @dynamokaj के लिए धन्यवाद। हालांकि, अगर मैं परीक्षण लक्ष्य में संकलन स्रोतों से डेमोडेल को हटा देता हूं, तो मुझे संकलन त्रुटि मिलती है क्योंकि डेमोमेल अब परीक्षण कक्षा में दिखाई नहीं दे रहा है। – rob

4

घंटों के लिए इस के खिलाफ मेरे सिर को टक्कर लगी, और वेब पर जो भी मैं पा सकता था वह लक्ष्य चीज थी। बाहर निकलता है मैंने xcdatamodeld संपादक में "कक्षा" फ़ील्ड सेट नहीं किया था, यह अभी भी "NSManagedObject" था जब यह कक्षा का नाम होना चाहिए था ...

यह सुनिश्चित करने के लिए जांचें कि कक्षा का नाम दोनों में है डेटा मॉडल इंस्पेक्टर (सीएमडी-ऑप्ट -3) में "नाम" फ़ील्ड और "कक्षा" फ़ील्ड।

+0

इस प्रतिक्रिया के लिए धन्यवाद। यह मेरी समस्या हल हो गई। –

0

प्रबंधित वस्तुओं के लिए वर्ग की जाँच करने के इस तरह से उपयोग करने के लिए बेहतर है:

if ([object.entity.name isEqualToString:NSStringFromClass(MyManagedObjectSubclass.class)]) { 

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