2013-01-05 18 views
11

Obiettivo: Vorrei recuperare il valore di un attributo (da un'entità) dal database (dati di base) in un array.coredata - recupera un attributo in un array

Esempio

Nome entità = Dipendenti

Attributo = employeeID

Voglio solo tutti i employeeIDs popolate in un array/set.

Domanda

Dato che segue è la mia realizzazione, mi sento che è una specie di una rotonda modo, vorrei sapere se c'è un modo migliore per farlo.

Codice

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

Utilizzare il recupero come dizionari per richiedere l'opzione di richiesta e specificare "ID dipendente" come chiave per il recupero. Controlla NSFetchRequest.h. – nielsbot

risposta

23

È possibile evitare l'ultimo ciclo for,

Invece di,

NSMutableArray *employeeIDs = [NSMutableArray array]; 

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

Prova questo,

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

grazie mille !! mi stava rompendo la testa. – user1046037

+8

Solo un testa a tutti: valueForKey restituisce un NSArray. Se hai davvero bisogno che sia mutabile, chiama mutableCopy sui risultati. NSMutableArray * employeeIDs = [[result valueForKey: @ "employeeID"] mutableCopy]; – Mattio

+1

Commento perfetto, Mattio! –

16

Un modo per farlo è-

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

Grazie .. Mi ha aiutato .. – Shivaay

+2

È possibile limitare gli attributi restituiti a ciò che è necessario utilizzando [richiesta setPropertiesToFetch: @ [@ "<# Nome attributo #>"]]; Vedi https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/fetchExpressions.html – MacMark

Problemi correlati