2013-02-08 7 views
0

J'ai créé un modèle CoreData et défini mes entités et attributs. J'ai aussi créé une classe (nommée dbInterface) de NSObject conforme à <NSFetchedResultsControllerDelegate> et a ajouté les objets suivantsCoreData Querying

NSFetchedResultsController *fetchedResultsController; 
NSManagedObjectContext *managedObjectContext; 

Voici où je suis très perdu. Comment puis-je maintenant obtenir des données à partir du fichier sqlite3 qui a été créé? Ma requête, si c'est le bon terme à utiliser, doit sélectionner certains enregistrements d'une de mes entités en fonction d'une condition. Je ne sais pas comment écrire une requête ou quelque chose de ce genre dans CoreData.

+2

La documentation de 'NSFetchedResultsController' inclut un exemple de code détaillé et six exemples d'applications différentes qui l'utilisent. Avez-vous une question précise que rien de tout cela ne répond? –

+0

Eh bien maintenant, je sais où aller, merci! J'ai été tellement ébloui par différents sites créant des enveloppes de modèles et le contexte de l'objet du modèle. – jacobronniegeorge

Répondre

9

Vous ne voulez probablement pas de NSFetchedResultsController. Un contrôleur de résultats est généralement utilisé avec UITableViewController en tant qu'objet auxiliaire pour remplir la table.

Si c'est ce que vous voulez, continuez. Cependant, si vous cherchez simplement à obtenir les entités du contexte de données de base, vous n'avez besoin que d'une NSFetchRequest. Disons que vous avez un objet de données de base appelé Personne. Disons que nous voulons toutes les entités qui sont nommées "Ryan"

NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 

NSString *nameToGet = @"Ryan"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", nameToGet]; 
[fetch setPredicate:predicate]; 

NSError *error = nil; 
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:&error]; 
if(results) { 
    NSLog(@"Entities with that name: %@", results); 
    for(Person *p in results) { 
     NSLog(@"person = %@", p); 
    } 
    return results; 
} else { 
    NSLog(@"Error: %@", error); 
} 

return nil; 

Donc vous créez une requête d'extraction. Un NSPredicate est comme les conditions where d'une instruction SQL. Vous créez donc un prédicat avec un format (there are tons of options for creating predicates). Définissez le prédicat de la demande, puis dites à votre managedObjectContext d'exécuter la requête d'extraction. Tous les résultats de la requête seront dans le tableau renvoyé. Chaque objet du tableau sera un objet de type Person.

Si vous cherchez à utiliser NSFetchedResultsController, c'est essentiellement le même type de chose. Cependant, vous créez le contrôleur avec une requête d'extraction qui est immuable, donc elle obtient toujours les mêmes données. Si vous voulez des données différentes, vous devrez créer un autre contrôleur. Si vous vous contentez de NSFetchRequests (j'épelle mes couches de données depuis mon interface utilisateur, l'utilisation des contrôleurs ne me semble pas très utile), vous pouvez interroger toutes les données que vous voulez et renvoyer les résultats.

+0

Comme vous l'avez mentionné, je n'utilise pas de tableview ... je veux simplement interroger et rechercher des enregistrements spécifiques et charger dans un tableau. Je suppose que c'est la bonne méthode pour charger dans un tableau? – jacobronniegeorge

+1

oui, en utilisant ce code ci-dessus, le tableau 'results' est le tableau des objets qui correspondent au prédicat dans le contexte de données de base – ColdLogic

+0

en lançant une erreur:' pour (Personne * p dans les résultats) 'utilisation de l'identificateur non déclaré – jacobronniegeorge