2010-03-07 3 views
1

J'ai une classe ConfiguracaoDaApp dans mon projet qui est une sous-classe NSManagedObject. Je n'ai pas modifié le code par défaut généré par XCode.Comment récupérer un objet métier à partir du retour de la méthode executeFetchRequest?

Je déclare une variable d'instance de ce type dans mon délégué de l'application et dans ma méthode appDidFinishLaunching, je suis essayer d'affecter sa valeur à partir d'un objet récupéré à partir de la base de données comme ceci:

NSFetchRequest  *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ConfiguracaoDaApp" inManagedObjectContext:self.managedObjectContext]; 

    [request setEntity:entity]; 
    configDaApp = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0]; 

Le problème est que la ligne

[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0]; 

ne renvoie pas un objet de type ConfiguracaoDaApp.

J'ai essayé de changer la ligne à ceci:

configDaApp = [[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] entity]; 

Ensuite, un NSEntityDescriptor est retourné et le problème reste le même. Donc, ma question est: comment récupérer un objet métier réel à partir d'executeFetchRequest?

Merci d'avance. Obs: pardonnez-moi si c'est une question débutant mais c'est ma première application iPhone.

+0

Alors quel type d'objet '[[managedObjectContext executeFetchRequest: demande erreur: & erreur] objectAtIndex: 0];' return? –

+0

Avec la ligne que vous avez demandée, elle renvoie un (ConfiguracaoDaApp_ConfiguracaoDaApp_ *). Le nom de ma classe d'objet métier concaténé deux fois. – reinaldoluckman

+0

Votre problème est ailleurs. Votre tentative originale (traitant le résultat de 'executeFetchRequest: error:' comme un tableau d'objets "ConfiguracaoDaApp") était correcte. – gerry3

Répondre

0

Je figure tout ce qui se passe:

[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0]; 

retourne un objet autorelease et quand j'ai essayé d'accéder à la propriété dans d'autres parties du code, son contenu était trash mémoire de l'application car le ConfiguracaoDaApp d'origine objet a été libéré par pool autorelease. Ma propriété a été déclarée avec retenue, mais l'objet est autoeleased de toute façon. J'ai donc mis explicitement une retenue dans la ligne:

configDaApp = [[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain]; 

Puis tout fonctionne très bien.

Merci quand même, les gars.

+0

N'oubliez pas de libérer dans dealloc. :RÉ – reinaldoluckman

Questions connexes