2009-10-16 15 views
6

मुझे एक सार मूल वस्तु के लिए जटिल अनुमान बनाने की आवश्यकता है। मैं अलग-अलग विरासत इकाइयों के लिए अलग-अलग अनुमानित प्रश्न पूछना चाहता हूं और उप-इकाई प्रकार को बंद करना चाहता हूं, नीचे दिया गया उदाहरण वह है जो मैं करना चाहता हूं, हालांकि, मैं इकाई नाम का संदर्भ देने या टाइप करने का कोई तरीका नहीं ढूंढ पाया भविष्यवाणीअभिभावक इकाई के फ़ेच अनुरोध के लिए आप भविष्य में बाल इकाई नाम का संदर्भ कैसे दे सकते हैं?

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
request.entity = [NSEntityDescription entityForName:@"MyCommonObjectBase" inManagedObjectContext:myContext]; 

NSPredicate *subclassAPredicate = [NSPredicate predicateWithFormat:@"someValue > %@ && entityName = %@", 100, @"SubclassA"]; 
NSPredicate *subclassBPredicate = [NSPredicate predicateWithFormat:@"someValue < %@ && entityName = %@", 50, @"SubclassB"]; 

request.predicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:subclassAPredicate, subclassBPredicate, nil]]; 

उत्तर

10

मैं http://bugreport.apple.com समस्या संख्या 7,318,897 पर एप्पल से एक प्रतिक्रिया मिली:

entity.name एक मॉडलिंग की संपत्ति नहीं है, तो यह कानूनी नहीं है। यह बाइनरी स्टोर पर दुर्घटना से काम करता है। Subentities लाने का सही तरीका NSFetchRequest पर ऐसा करना है और या तो setIncludesSubentities का उपयोग करें या नहीं।

तो ऐसा लगता है कि उचित समाधान प्राप्त करने के लिए उचित निष्पादन और निष्पादन के बाद परिणाम सेट को मर्ज करना उचित समाधान है।

+0

तो आप जो कह रहे हैं, मेरी समस्या में पहले परिणाम लाने के बजाय समाधान नहीं है और फिर परिणामों पर हाथ की भविष्यवाणी लागू करें? http://stackoverflow.com/questions/11934763/nspredicate-on-nested-object-nsset-to-filter-the-result-during-nsfetchrequest – yunas

+0

दुर्भाग्य से हाँ। –

3

अंधेरे यहाँ में एक शॉट है, लेकिन के बारे में क्या विधेय में className मूल्य का उपयोग कर?

NSPredicate *subclassAPredicate = [NSPredicate predicateWithFormat:@"someValue > %d AND child.className = %@", 100, @"SubclassA"]; 

(सूचना है कि आप। %@ अपने विधेय प्रारूप में। आप %@ उपयोग कर रहे थे कोशिश करते हैं और एक पूर्णांक मूल्य (100) में स्थानापन्न करने के लिए एक त्रुटि थी केवल वस्तुओं के लिए प्रयोग किया जाता है। का प्रयोग करें %d (या कुछ अन्य स्वाद) प्राइमेटिव्स के लिए)

संपादित करें इसे मिला!

आप ऐसा करना चाहते हैं:

NSPredice * p = [NSPredicate predicateWithFormat:@"entity.name = %@", @"SubclassA"]; 

मैं सिर्फ अपनी क्षुधा में से एक पर इस परीक्षण किया है और यह काम करने लगता है।

-Another संपादित

यहाँ परीक्षण है कि मैं भाग गया, जो काम करने के लिए लग रहा था है:

NSManagedObjectContext * c = [self managedObjectContext]; 
NSFetchRequest * f = [[NSFetchRequest alloc] init]; 
[f setEntity:[NSEntityDescription entityForName:@"AbstractFolder" inManagedObjectContext:c]]; 
[f setPredicate:[NSPredicate predicateWithFormat:@"entity.name = %@", @"DefaultFolder"]]; 
NSError * e = nil; 
NSArray * a = [c executeFetchRequest:f error:&e]; 
[f release]; 
NSLog(@"%@", a); 

जब मैं चलने वाले, a लॉग दो NSManagedObjects, @"DefaultFolder" किस्म के दोनों (जो क्या है मैं उम्मीद कर रहा था)। (AbstractFolder एक अमूर्त इकाई है बच्चे संस्थाओं है कि विरासत में यह है से से एक एक DefaultFolder।)

+0

मैं इसे एक शॉट दूंगा, धन्यवाद। हाँ, यह चित्रण के लिए कुछ उत्पादन कोड को सामान्यीकृत करने से एक टाइपो है। –

+0

कोई भाग्य नहीं, className मान्य कीपैथ नहीं है। इसके अलावा, मैं खुद को इकाई के नाम की तलाश कर रहा हूं, न कि केवल बच्चे की इकाई को स्पष्ट करने के लिए। –

+1

@ ग्रेग मुझे एक ऐसा तरीका मिला जो मेरा जवाब काम करता है और संपादित करता है। –

-1

एक इकाई मैं की तरह के बारे में पता के साथ एक विधेय से संबद्ध करने के लिए एक ही रास्ता यह है:

NSPredicate * predicate = [NSPredicate predicateWithFormat: @"(%K == %@)", fieldName, fieldValue, nil]; 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]]; 
[request setPredicate:predicate]; 

शायद तुम क्षेत्र के नाम का जिक्र कर रहे थे?

संपादित करें: इकाई अनुरोध के साथ जुड़ी है, न कि भविष्य के साथ।

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