4 votes

Le NSURL est nul dans le simulateur, mais correct sur l'iPad.

J'essaie de charger un fichier audio dans AVAudioPlayer sur l'iPad. Lorsque je l'exécute sur l'iPad, il le trouve dans le bundle sans problème. Cependant, si j'essaie de l'exécuter dans le simulateur, j'obtiens une erreur nulle pour le NSURL. Voici le bout de code (num est un entier arbitraire) :

NSString *name = [NSString stringWithFormat:@"st-answermachine-%i", num];
NSLog(@"name = %@", name);
NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"m4a"];
NSLog(@"path = %@", path);
NSURL *url = [NSURL URLWithString:path];
NSLog(@"url = %@", url);

Dans le simulateur, la console de débogage retrace cette opération :

nom = st-answermachine-1

path = /Users/joe/Library/Application Support/iPhone Simulator/3.2/Applications/B85E9CC8-6E39-47B9-XXXX-1E3A2CE145D1/MyApp.app/st-answermachine-1.m4a

url = (null)

Mais si je l'essaie sur l'appareil, j'obtiens ceci :

nom = st-answermachine-1

path = /var/mobile/Applications/116DA1CB-EA13-4B80-XXXX-EBD46C8E2095/MyApp.app/st-answermachine-1.m4a

url = /var/mobile/Applications/116DA1CB-EA13-4B80-XXXX-EBD46C8E2095/MyApp.app/st-answermachine-1.m4a

Avez-vous une idée de la raison pour laquelle je pourrais avoir ce problème ?

Gracias.

16voto

grahamparks Points 10187

URLWithString: attend une chaîne contenant une URL réelle comme paramètre (par exemple, "http://blah/" ou "file:///blah"). Les URL ne peuvent pas contenir d'espaces (comme c'est le cas du chemin d'accès du simulateur), ce qui explique l'échec.

Comme le suggère Evan, vous devez utiliser fileURLWithPath: pour convertir une chaîne de chemin en un objet URL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X