2010-07-10 4 views
0

Je reçois une fuite de mémoire lorsque j'ajoute un descripteur de tri à ma requête d'extraction dans les données de base. Si je commente le bloc NSSortDescriptor, il s'exécute sans fuite de mémoire dans Instruments.Données de base NSSortDescriptor provoquant une fuite de mémoire

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

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Pools" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"game.league.id=%i",[lid intValue]]; 
[fetchRequest setPredicate:predicate]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"game.date" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSError *error; 
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

// Do Something 

[fetchRequest release]; 
[items release]; 

Des idées?

Répondre

1

Dans le descripteur de tri, vous marchez une relation à l'aide du code clé game.date.

Votre fuite est probablement associée à l'un de ces objets dans le keypath. Il disparaît lorsque vous supprimez le tri, car les objets du chemin de clé ne font rien.

Si vous avez des propriétés transitoires, des accesseurs personnalisés, des propriétés non-entité, etc. dans l'entité game, je regarderais là-bas. Les transformateurs de valeur personnalisée sont également un bon pari.

La pile dans Instrument devrait vous indiquer exactement quel objet fuit.

+0

Il n'y a pas de code personnalisé. La pile de données de base peut-elle être mal configurée? –

+0

Peu probable. Pourquoi la fuite apparaîtrait-elle ici au lieu d'installer la pile de données de base? Les instruments vous diront ce qui fuit. Faites glisser ce fichier source dans Instruments et il vous montrera la ligne qui fuit. Examinez la pile pour cette ligne et elle vous montrera quel objet fuit. C'est probablement dans le code '// do something' lié au' game.date'. – TechZen