2010-03-22 7 views
4

J'ai une application basée sur les données de base qui gère les dossiers des concessionnaires automobiles. Chaque enregistrement stocke l'adresse du revendeur, qui est divisée en addressLine1, addressLine2, city, state et zip composants, chacun étant stocké en tant que chaîne dans le magasin de données.Valeurs uniques à partir des données de base

Je voudrais présenter une liste de villes avec des concessionnaires à l'utilisateur, donc j'essaie de comprendre s'il est possible d'obtenir une liste de tous les unique nom de ville qui a été entré dans le magasin. Autrement dit, est-il possible d'émettre une sorte de requête contre tous les enregistrements de concession qui renverront une liste de noms de villes distinctes?

Je saurais comment le faire facilement avec une requête SQL, mais (comment) est-ce fait dans les données de base?

Merci beaucoup!

Répondre

5

Vous avez raison, il n'y a pas de façon "facile" de faire cela avec les données de base, car les données de base ne sont pas une base de données. Cependant, c'est possible. Voici l'idée générale:

  1. Récupérez tous vos objets du concessionnaire via un NSFetchRequest. Pour simplifier la requête, vous pouvez définir la demande d'extraction pour récupérer uniquement l'attribut city.
  2. Execute NSArray * uniqueCities = [fetchedDealers valueForKeyPath:@"@distinctUnionOfObjects.city"];
0

Un moyen rapide pour assurer un ensemble unique de choses est d'utiliser NSSet. Une fois que vous avez les résultats pour une requête sur la ville et prendre votre NSArray faire

NSSet* uniqueResults = [NSSet setWithArray:resultsArray]; 

Vous pouvez transformer l'ensemble dans une autre classe de collection si plus commode ou juste le recenseur objet de faire quelque chose avec eux. Je ne sais pas si cette approche ou la méthode valueForKeyPath de Dave DeLong est plus efficace.

7

Les données de base ont la possibilité d'obtenir un enregistrement distinct. La méthode d'obtention de résultats uniques à l'aide de NSArray et de NSSets n'est pas recommandée.

[fetchRequest setResultType:NSDictionaryResultType]; 
NSDictionary *entityProperties = [entity propertiesByName]; 
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"<<yourattrib>"]]]; 
[fetchRequest setReturnsDistinctResults:YES]; 

Reportez-vous Apple documentation et vérifiez les réponses pour How to fetch distinct values in Core Data?

Questions connexes