यह काफी मजाकिया है। मेरे आवेदन में मैं डेटाबेस में हजारों प्रविष्टि बनाता हूं (दूसरे धागे में, मैं जादुई रिकार्ड का उपयोग कर रहा हूं)। सबकुछ ठीक काम करता है (पृष्ठभूमि/अग्रभूमि/संदर्भ बिंदु से)।NSPredicate निष्पादित नहीं
- (NSArray *) familiesInCompany:(Company *) company {
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"company == %@", company];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"company.name == %@", company.name];
NSArray *first = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate1];
NSArray *second = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate2];
NSArray *third = [Family MR_findByAttribute:@"company" withValue:company andOrderBy:@"name" ascending:YES];
return second;
}
अब मैं क्या मिलता है:
- पहले:
मुख्य थ्रेड में, मैं "बस डाला" डेटा प्राप्त करने का प्रयास करते हैं,, मैं निम्नलिखित व्यवहार की खोज की है एक खाली सरणी
- सेकंड: सभी
Family
ऑब्जेक्ट्स शामिल हैं, अपेक्षित - तीसरा: एक खाली सरणी है।
SQL विवरण मैं निम्नलिखित मिल डिबगिंग द्वारा:
"पहली" बयान:
CoreData: एनोटेशन: कुल लाने निष्पादन समय: 0.0000s 0 पंक्तियों के लिए।
"दूसरी" बयान ":
CoreData: एसक्यूएल: 0, t0.Z_PK, t0.Z_OPT, t0.ZNAME, t0.ZCOMPANY ZFAMILY t0 से ZCOMPANY t1 शामिल हों t0 चालू करें चुनें। ZCOMPANY = t1.Z_PK कहां t1.ZNAME = t0.ZNAME
CoreData द्वारा आदेश: एनोटेशन: एसक्यूएल कनेक्शन लाने का समय: 0.0005s
CoreData: एनोटेशन: कुल लाने निष्पादन समय: 0.0007s 2 के लिए पंक्तियों।
"तीसरा" बयान:
CoreData: एनोटेशन: कुल निष्पादन समय लाने: 0.0000s 0 के लिए पंक्तियों।
उल्लसित बात यह है कि मैं एप्लिकेशन को बंद करता हूं (मेरा मतलब है कि वास्तव में इसे मैन्युअल रूप से समाप्त कर दिया जाता है) और मैं इसे वापस खोलता हूं, सभी तीन "fetching" कथन काम करते हैं।
क्यों पहला और तीसरा fetch स्टेटमेंट कभी निष्पादित नहीं किया जा रहा है? समस्या में कैसे खोदना है?
अनिवार्य रूप से एक ही समस्या होने के कारण, मुझे एक NSFetchedResultsController कार्यान्वयन के साथ लगता है। हाल ही में बनाए गए रिकॉर्ड fetch परिणाम में दिखाई नहीं देते हैं, लेकिन जब मैं सीधे जांचता हूं तो लगातार स्टोर में लिखा गया है - सही गिनती रिश्ते में भी दिखाई देती है NSSet, लेकिन NSPredicate उन्हें नहीं देखता है। अजीब। MagicalRecord 2 का उपयोग करना - पिछले प्रोजेक्ट के लिए 1.x संस्करण का उपयोग किया गया था और इसमें कोई परेशानी नहीं थी, इसलिए मैं केवल पाठ्यक्रम बदल सकता हूं और पुराने संस्करण का उपयोग कर सकता हूं। –
बेवकूफ (और ऑफ-विषय का प्रकार) प्रश्न: आप एसक्यूएल स्टेटमेंट कैसे लॉगिंग कर रहे हैं? मैं वास्तव में उत्सुक हूं कि बेहतर तरीके से समझने के लिए मेरे ऐप में यह कैसे करना है –
@FelipeSabino जांचें http://stackoverflow.com/questions/6428630/xcode4-and-core-data-how-to-enable-sql-debugging और http://d.pr/i/Lszs –