2013-01-05 13 views
11

उद्देश्य: मैं डेटाबेस (कोर डेटा) से एक सरणी में एक विशेषता (किसी इकाई से) का मान प्राप्त करना चाहता हूं।coredata - एक सरणी में एक विशेषता

उदाहरण

इकाई नाम = कर्मचारियों

गुण = EmployeeID

मैं सिर्फ सभी employeeIDs एक सरणी/सेट में डाला जा चाहते हैं।

प्रश्न

नीचे दिए गए मेरे कार्यान्वयन है, मैं सिर्फ यह तरीके के बारे में एक दौर की तरह है लग रहा है, मैं अगर वहाँ यह करने के लिए एक बेहतर तरीका है पता करने के लिए करना चाहते हैं।

कोड

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"]; 

fetchRequest.resultType = NSDictionaryResultType; 

[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"employeeID", nil]]; 

NSError *error  = nil; 
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest 
                   error:&error]; 

NSMutableArray *employeeIDs = [NSMutableArray array]; 

for(id currentRecord in results) 
{ 
    [employeeIDs addObject:[currentRecord objectForKey:@"employeeID"]]; 
} 
+0

शब्दकोश लाने के विकल्प के रूप में fetch का उपयोग करें, और "कर्मचारी आईडी" को लाने के लिए अपनी कुंजी के रूप में निर्दिष्ट करें। NSFetchRequest.h जांचें। – nielsbot

उत्तर

23

आप पाश के लिए पिछले से बच सकते हैं,

बजाय

,

NSMutableArray *employeeIDs = [NSMutableArray array]; 

for(id currentRecord in results) 
{ 
    [employeeIDs addObject:[currentRecord objectForKey:@"employeeID"]]; 
} 

इस प्रयास करें,

NSMutableArray *employeeIDs = [results valueForKey:@"employeeID"]; 
+0

बहुत बहुत धन्यवाद !! इस पर मेरा सिर तोड़ रहा था। – user1046037

+8

बस किसी और के लिए एक सिर: valueForKey एक एनएसएआरएआर देता है। यदि आपको वास्तव में इसे व्यवहार्य होने की आवश्यकता है, तो परिणामों पर mutableCopy को कॉल करें। एनएसएमयूटेबलएरे * कर्मचारी आईडी = [[परिणाम मूल्यफोरकी: @ "कर्मचारी आईडी"] mutableCopy]; – Mattio

+1

बिल्कुल सही टिप्पणी, मैटियो! –

16

ऐसा करने का एक तरीका है-

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"]; 
fetchRequest.resultType = NSDictionaryResultType; 

NSError *error  = nil; 
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest 
                   error:&error]; 

NSMutableArray *employeeIDs = [results valueForKey:@"employeeID"]; 
+0

धन्यवाद..इसने मेरी मदद की .. – Shivaay

+2

आप [अनुरोध सेटप्रॉपर्टीज टोफेट: @ [@ "<# विशेषता का नाम #>"]] का उपयोग करके आपको जो चाहिए उसे लौटाए गए गुणों को सीमित कर सकते हैं; Https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/fetchExpressions.html देखें – MacMark

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