2013-10-16 8 views
9

का उपयोग कर कोर्डटा से एक ऑब्जेक्ट कैसे प्राप्त करें, मैं अपने कोर्डाबेस से एक ऑब्जेक्ट लाने की कोशिश कर रहा हूं, हालांकि यह वापस लौट रहा है। मेरी विधि एक अन्य विधि से आधारित है जो मैं उपयोग कर रहा हूं कोरेडाटा ऑब्जेक्ट से प्रत्येक मान देता है ..एक अनुमानित

मैंने पहले कभी कोशिश नहीं की है और सेब दस्तावेजों को पढ़ने की कोशिश की है, लेकिन यह सिर्फ समझ में नहीं आया .. यह मेरी विधि है लग रहा है

तरह
- (NSMutableArray *)readSelectedInstall:(NSString *)projIDString { 
    NSManagedObjectContext *context = [self managedObjectContext]; 

    if (context == nil) { 
     NSLog(@"Nil"); 
    } 
    else { 


     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"InstallProject" inManagedObjectContext:context]; 
     [fetchRequest setEntity:entity]; 

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ProjID==%@", projIDString]; 
     [fetchRequest setPredicate:predicate]; 

     NSError *error; 

     NSMutableArray *installProjectDictionaryArray = [[NSMutableArray alloc] init]; 


     NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
     for (InstallProject *installProj in fetchedObjects) { 

      NSMutableDictionary *tempInstallProjectDictionaryArray = [[ NSMutableDictionary alloc] init]; 

      [tempInstallProjectDictionaryArray setObject:installProj.companyName forKey:@"CompanyName"]; 
      [tempInstallProjectDictionaryArray setObject:installProj.projNo forKey:@"ProjNo"]; 
      [tempInstallProjectDictionaryArray setObject:installProj.projID forKey:@"ProjID"]; 

      [installProjectDictionaryArray addObject:tempInstallProjectDictionaryArray]; 
     } 

     return installProjectDictionaryArray; 
    } 
    return nil; 
} 

किसी भी मदद के लिए मुझे मिल रहा है thats projID से मेल खाता है projIDString बहुत सराहना की जाएगी एक आइटम लौटने के लिए।

+0

है 'संदर्भ == nil' स्विफ्ट में ? या 'executeFetchRequest' वापसी' nil' करता है? बाद के मामले में, 'त्रुटि' का मूल्य क्या है? –

+0

पता चला है कि मैं अपनी कॉर्डटामैनाजिन कक्षा आवंटित नहीं कर रहा था .. मैंने अभी यह किया है और एक त्रुटि प्राप्त कर रहा हूं। "अनिश्चित अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएनवालिडअर्ग्यूमेंट एक्सेप्शन', कारण: 'अनुमानित एसक्यूएल पीढ़ी भविष्यवाणी के लिए: (किसी भी प्रोजेक्ट में शामिल है [सीडी]" 10000085 ")" – HurkNburkS

+0

"कोई भी प्रोजेक्ट शामिल है [सीडी] ..." यह अनुमान नहीं है कि आपने अपने प्रश्न में दिखाया ... –

उत्तर

16

आयात NSManagedObject (InstallProject) और इस तरह एक वस्तु, सीमा लाने

-(InstallProject *)readSelectedInstall:(NSString *)projIDString 
{ 

    NSArray *fetchedObjects; 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"InstallProject" inManagedObjectContext: context]; 
    [fetch setEntity:entityDescription]; 
    [fetch setPredicate:[NSPredicate predicateWithFormat:@"(ANY ProjID contains[cd] %@)",projIDString]]; 
    NSError * error = nil; 
    fetchedObjects = [context executeFetchRequest:fetch error:&error]; 

    if([fetchedObjects count] == 1) 
    return [fetchedObjects objectAtIndex:0]; 
    else 
    return nil; 

} 
+0

ठीक है, मुझे पता चला कि मैं अपने coredatamanaging वर्ग को initalizing नहीं था और ऐसा करने के बाद यह है कि आपका कोड वापस आया "अनसुलझा अपवाद के कारण ऐप को समाप्त करना" एनएसआईएनवालिडअर्गमेंट एक्सेप्शन ', कारण:' अनुमानित एसक्यूएल पीढ़ी भविष्यवाणी के लिए: (कोई भी प्रोजेक्ट शामिल है [सीडी] "10000085 ") ' – HurkNburkS

+0

ठीक है [NSPredicate predicateWithFormat: @" ProjID ==% @ ", projIDString] का उपयोग करें या कोशिश करें, [NSPredicate predicateWithFormat: @" ProjID CONTAINS% @ ", नाम]]; – karthika

+0

आपको अंत में आईएफ ईएलएसई को प्रतिस्थापित करना चाहिए और बस [fetchedObjects firstObject] को वापस करना चाहिए। यदि सरणी में कोई ऑब्जेक्ट नहीं है, तो यह आपके लिए शून्य वापस आ जाएगा। – CharleyXIV

11

क्या fetchRequest आपको लगता है कि सेट कर सकते हैं पर fetchLimit के बारे में

को लाने अधिकतम निर्दिष्ट करता है ऑब्जेक्ट्स की संख्या जो निष्पादित होने पर अनुरोध लौटाया जाना चाहिए।

ईजी।

let fetchRequest = NSFetchRequest(entityName: "Cart") 
fetchRequest.fetchLimit = 1 
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

संपादित करें:: sortDescriptors केवल सेट कर रहे हैं क्योंकि मैं एक NFRC के साथ इस fetchRequest उपयोग कर रहा था, तो आप अभी भी fetchRequest पर अमल कर सकते हैं:

do { 
    let fetchRequest = NSFetchRequest(entityName: "Cart") 
    fetchRequest.fetchLimit = 1 
    fetchRequest.predicate = NSPredicate(format: "name == %@", mainCart) 
    var objects: [Cart] 
    try objects = mainMoc.executeFetchRequest(fetchRequest) as! [Cart] 
} catch { 

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