2010-12-02 12 views
0

Dear community. J'ai trouvé un problème d'utilisation de données de base. Voici la description: De mon AppDelegate j'ai appelé ma propre classe:faire deux demandes de récupération différentes par une méthode - semble impossible

InitUpdateIXC *initAndUpdate = [[[InitUpdateIXC alloc] init] autorelease]; 
[initAndUpdate updateCarrierList:self.managedObjectContext]; 

Puis-je utiliser là deux méthodes, qui mettent à jour managedObjectContext, insérer, ajouter certaines entités E.T.C.

Dans ce cas, je trouve la limitation à l'utilisation prédicat deux fois par méthode: d'abord à l'aide fonctionne bien, et j'ai vu des résultats Requête:

NSFetchRequest *requestDestinationsForSale = [[NSFetchRequest alloc] init]; 
[requestDestinationsForSale setEntity:[NSEntityDescription entityForName:@"DestinationsListForSale" 
           inManagedObjectContext:managedObjectContext]]; 

[requestDestinationsForSale setPredicate:[NSPredicate predicateWithFormat:@"carrier.name like %@",carrierName]]; 

NSArray *destinationsForSale = [managedObjectContext executeFetchRequest:requestDestinationsForSale error:&error]; 

intérieur de la boucle autour de MO:

for (NSManagedObject *destinationForSale in destinationsForSale) 
{ 
    for (NSManagedObject *code in [destinationForSale valueForKey:@"codesvsDestinationsList"]) 
    { 

j'essaie de faire de nouvelles fetchRequest:

NSFetchRequest *requestDestinationWeBuy = [[[NSFetchRequest alloc] init] autorelease]; 
[requestDestinationWeBuy setEntity:[NSEntityDescription entityForName:@"DestinationsListWeBuy" 
              inManagedObjectContext:managedObjectContext]]; 
NSError *error = nil; 
[requestDestinationWeBuy setPredicate:[NSPredicate predicateWithFormat:@"carrier.name like %@",carrierName]]; 
NSArray *destinationWeBuyList = [managedObjectContext executeFetchRequest:requestDestinationWeBuy error:&error]; 

ops ... NSArra y est vide ... si je fais la même chose quand j'appelle la méthode depuis AppDelegate: [initAndUpdate updateRoutingTable: self.managedObjectContext];

C'est une même classe, la même méthode, juste appelée à partir de AppDelegate principal et peu modifiée pour utiliser un contexte juste géré, tout fonctionne bien.

On dirait que managedObjectContext n'a de mises à jour finales que lorsque nous quittons les méthodes de classe, qui font des mises à jour. Un commentaire sera grandement apprécié.

+0

D'accord. Vous avez 11 questions avec 0 réponses acceptées, Alex. Qu'y a-t-il pour que la communauté continue à vous aider? –

+0

Je vais prendre pitié, mais vous devez accepter certaines réponses. Cliquez sur votre nom et passez en revue vos questions précédentes et cliquez sur la coche à côté de la réponse qui répond le mieux à votre question. Personne qui répond à vos questions ne reçoit de points de réputation si vous n'acceptez jamais de réponses. – TechZen

+0

Je suis désolé, j'ai été manqué ce point important :-). C'est fait pour l'instant – Alex

Répondre

0

Dans votre premier chargement, vous allez chercher sur l'entité DestinationsListForSale mais dans la seconde vous récupérez sur l'entité DestinationsListWeBuy. L'explication la plus simple est que le même prédicat ne produit pas le même résultat lorsqu'il est appliqué à différentes entités.

En fonction des spécificités des entités et de la persistance des données à un moment donné, le même prédicat produira des résultats différents lorsqu'il est appliqué à des entités différentes.

En effet, ce serait le comportement attendu.

+0

Comme vous l'avez vu dans le code, je fais une requête d'extraction différente pour différentes entités. – Alex

+0

NSFetchRequest * requestDestinationWeBuy et NSFetchRequest * requestDestinationsForSale – Alex