2010-07-29 11 views
0

Je dois à des entités à savoir «compte» et «événement».impossible d'extraire les enregistrements liés dans la relation dans Coredata, pourquoi?

Le compte doit être lié à l'événement et inversement à l'événement. Maintenant, quand je sauve un objet d'événement au compte cela fonctionne bien. Mais quand j'obtiens des événements pour un compte associé particulier, cela donne toutes les entités disponibles ce qui n'est pas un comportement souhaitable.

Je passe l'objet currentAccount comme suit:

if (PrivarteController == nil) { 
     PrivarteController *aController = [[PrivarteController alloc]initWithNibName:@"PrivarteController" 
                          bundle:nil]; 
     self.PrivarteController = aController; 
     [aController release]; 
    } 
    self.PrivarteController.shouldFetchNewCounts = YES; 
    self.PrivarteController.currentAccount = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    [[self navigationController] pushViewController:self.PrivarteController animated:YES]; 

dans ce contrôleur, je suis aller chercher pour les événements liés à un compte comme celui-ci:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

    NSString *predicateFormat = [NSString stringWithFormat:@"ddtype = 'Home'"]; 

    NSPredicate *pred = [NSPredicate predicateWithFormat:predicateFormat]; 
    [request setPredicate:pred]; 

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"DDEvent" inManagedObjectContext:[self.currentAccount managedObjectContext]]; 
    [request setEntity:entity]; 
    [request setResultType:NSManagedObjectResultType]; 

    NSError *error = nil; 
    NSArray *array = [[self.currentAccount managedObjectContext] executeFetchRequest:request error:&error]; 

Dans cette demande suppose que j'ai deux événements de Home dans le compte A et 2 événements de Home dans le compte B donc au lieu de me donner 2 objets pour chaque compte il me donne tous les 4 objets pour les deux comptes donc quel est le problème avec la requête.

Je n'ai aucune idée de ce qui ne va pas?

Merci,

Répondre

1

Votre prédicats doit filtrer sur account-- ils partagent un contexte d'objet géré.

+0

mais l'application TaggedLocations d'apple fait la même chose et fonctionne dans leur application. ou nous devons filtrer sur le compte? – harshalb

+1

À moins que vous ne gériez des contextes distincts (et, vraisemblablement, des magasins persistants), vous aurez besoin que votre prédicat soit explicite. – Justin

+0

Ça m'a juste pris la tête. désolé de demander à nouveau, mais que voulez-vous dire par prédicat explicite? – harshalb

1

Je ne suis pas sûr d'avoir bien lu ceci parce que vous parlez des entités account et event mais ces noms n'apparaissent pas dans le code.

Néanmoins, il me semble que le fetch fonctionne correctement. Vous lui avez dit d'aller chercher tous les objets DDEvent dont l'attribut ddevent est égal à 'home'. Vous dites que vous avez quatre objets et vous en récupérez quatre.

Je pense que votre problème est que vous avez la mauvaise entité dans votre fetch. Si vous souhaitez effectuer une recherche en fonction du compte, vous devez définir l'entité de l'extraction sur l'entité Account. Ensuite, vous dites au prédicat de marcher les relations. avec un prédicat comme "events.ddevent=='home'". Cela renverra une liste d'entités de compte avec ces critères.

mise à jour:

une extraction renvoie un tableau d'un seul type d'objet. Vous récupérerez soit un tableau de Account objets ou un tableau de DDEvent objets. Vous devez être clair quel objet vous avez besoin.

Quand vous dites:

Dans cette demande suppose que j'ai deux événements Accueil en compte A et 2 événements Accueil du compte B donc au lieu de me donner 2 objets pour chaque compte il me donne tous les 4 objets pour les deux comptes si ce qui est mal avec la requête

Vous semblez attendre de revenir à la fois Account et DDEvent objets. À l'heure actuelle, vous ne récupérez que des objets DDEvent. Une fois que vous savez exactement quel objet vous voulez, vous devez savoir clairement quelles propriétés les objets spécifiques que vous voulez avoir. En ce moment, vous ne récupérez que les objets DDEvent dont l'attribut 'ddevent ==' Home'` ne contient aucun enregistrement pour un autre attribut ou relation. Si vous voulez qu'ils aient une relation avec un compte particulier, vous devez l'ajouter au prédicat.

Habituellement, si vous voulez un objet particulier à l'autre extrémité d'une relation, vous récupérez l'objet principal et ensuite sa relation. Dans ce cas, si vous voulez les objets DDEvent en relation avec Account objet A correspondant à un critère. Vous récupéreriez l'objet Account A et ensuite vous utiliseriez un prédicat pour filtrer l'ensemble directdebits pour trouver les objets DDEvent spécifiques que vous vouliez.

+0

son ne fonctionne pas. supposons que j'ai une relation nommée "directdebits" de Account à DDEvent et que je modifie ma requête comme vous l'avez dit NSString * predicateFormat = [NSString stringWithFormat: @ "directdebits.ddtype = 'Accueil'"]; Mais me donne l'erreur que le chemin clé n'existe pas. Je ne comprends pas non plus "pensez que votre problème est que vous avez la mauvaise entité dans votre fetch.Si vous voulez effectuer une recherche basée sur le compte, vous devez définir l'entité de l'extraction à l'entité compte" comme je le pense Je fais déjà cela, alors s'il vous plaît expliquer si possible à travers un petit extrait. – harshalb

+0

Je veux rechercher ces DDEvents dont ddtype == 'Home' pas compte. – harshalb

Questions connexes