XCode 4 / Objective C : pathForResource = NULL

POUNAS

Membre confirmé
3 Juillet 2011
35
0
Bonjour,

voici un extrait de mon code :

Bloc de code:
#import "RegisterEntityManager.h"

@implementation RegisterEntityManager

/*
 */
- (void) loadXMLObjects 
{
    BOOL success;
    
    NSBundle *bundle = [NSBundle mainBundle];

    NSString *path = [bundle pathForResource:@"config" ofType:@"xml" inDirectory:@"config"];
    
    NSLog(@"path = %@", path);
    
	NSURL *url = [NSURL fileURLWithPath:path];
    
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    
    [xmlParser setDelegate:self];
    
    [xmlParser setShouldResolveExternalEntities:YES];
    
    success = [xmlParser parse]; 
}

L'objectif est donc de parser un fichier XML "config.xml" qui se trouve dans le répertoire "config".

j'utilise un testcase pour tester cette classe.

voici un extrait du code :

Bloc de code:
@implementation HTBTests

- (void)setUp
{
    [super setUp];
    
    // initialize the register entity manager
    rem = [[RegisterEntityManager alloc] init];
    
}

- (void)testExample
{
    [rem loadXMLObjects];
}
@end

j'obtiens "Path = NULL" lors du build !

la structure "resource" du dossier est pourtant la suivante :
resource
config
config.xml

le fichier se trouve bien dans la partie resource du projet.

j'ai aussi ajouté dans "build phases", l'item "copy files" concernant le répertoire "config".

j'ai essayé une quantité de solutions proposées sur les forums, j'obtiens toujours ce message "path = null" !

pouvez vous m'aider SVP.

merci par avance.
 
Les tests auto utilisent un deuxième bundle (regarde, ton projet comprend deux cibles).
Dans le code de test, +[NSBundle mainBundle] renvoie donc le bundle de l'exécutable de test, pas celui de l'appli.

Pour ce qui est de la solution, je crois qu'on pouvait s'en tirer en utilisant [NSBundle bundleForClass:[self class]].

(L'implémentation des tests auto par Apple présente de nombreux défauts, c'est pour cela que beaucoup utilisent Google Mac Toolbox ou GHUnit).
 
Il suffit de mettre ton fichier xml dans le groupe "Resources" de ton projet et il sera placé dans ce même groupe du bundle de ton application.

merci de l'info.

dois-je créer un groupe "Resources" ?

actuellement dans mes targets (projet + tests), j'ai un "build phase" "copy bundle resources" qui contient le fichier "config.xml".

---------- Nouveau message ajouté à 16h22 ---------- Le message précédent a été envoyé à 16h11 ----------

Les tests auto utilisent un deuxième bundle (regarde, ton projet comprend deux cibles).
Dans le code de test, +[NSBundle mainBundle] renvoie donc le bundle de l'exécutable de test, pas celui de l'appli.

Pour ce qui est de la solution, je crois qu'on pouvait s'en tirer en utilisant [NSBundle bundleForClass:[self class]].

(L'implémentation des tests auto par Apple présente de nombreux défauts, c'est pour cela que beaucoup utilisent Google Mac Toolbox ou GHUnit).

merci bcp, en effet c'est la solution (2 targets donc 2 bundle).

Je suis débutant sur XCode (je suis issu du monde Java / Eclipse).

et je constate que malgré la documentation généreuse de XCode, il manque à mon humble avis une mise à jour de celle-ci en XCode 4 (il reste encore du XCode 3 apparemment) et peut être une documentation "prise en main" rapide et légére sur le fonctionnement de XCode.