2 Stimmen

pathForResource funktioniert nicht

Ich habe ein Problem mit

NSString *filePaht = [[NSBundle mainBundle] pathForResource:(NSString *)name ofType:(NSString *)ext];

wenn ich

NSString *filePaht = [[NSBundle mainBundle] pathForResource:@"soundName" ofType:@"aiff"];

es ist OK. aber als ich die

NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"];
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];

Es ist keine Arbeit

haben Sie eine Ahnung!?

Merci

1 Stimmen

Das Problem scheint zu sein, dass fileName aber es ist schwer zu sagen, ohne mehr Code. Was ist file.list und wie wird sie initialisiert?

0 Stimmen

"Es funktioniert nicht" Welches spezifische Problem haben Sie?

6voto

drawnonward Punkte 52834

Ich gehe davon aus, dass der Dateiname aus file.list die Dateierweiterung enthält. Sie suchen also nach "soundName.aiff.aiff", die nicht existiert. Versuchen Sie, @"" als Typ zu übergeben oder die Erweiterung aus dem Dateinamen zu entfernen:

fileName = [fileName stringByDeletingPathExtension];

1voto

Peter Hosey Punkte 94684

Überprüfen Sie Ihre Debugger-Konsole, da sie Ihnen möglicherweise sagt, was Sie falsch machen.

[file.list objectAtIndex:index]

Wenn Sie eine NSRangeException erhalten, kann das daran liegen, dass index einen Index enthält, der außerhalb der Grenzen des Arrays liegt. Denken Sie daran, dass Arrays in Cocoa seriell und nicht assoziativ sind. Wenn Sie ein Objekt entfernen, werden die Indizes aller nachfolgenden Objekte um 1 verringert, wobei die Invariante 0 (jeder gültige Index) < (Anzahl der Objekte im Array) eingehalten wird.

Es könnte auch daran liegen, dass Sie haben nie eine Variable mit dem Namen index .

NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"];
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];

Wenn nichts passiert oder Sie eine NSInternalInconsistencyException erhalten, könnte es sich um einen der folgenden Fälle handeln:

  • fileList es nil .
  • Das Wörterbuch, das von [file.list objectAtIndex:index] nicht über ein Objekt für den Schlüssel soundName .

Wenn Sie in der Konsole die Meldung "Reagiert nicht auf Selektor" erhalten, kann es sich um einen der folgenden Fälle handeln:

  • file.list ist ein Objekt, aber kein NSArray.
  • [file.list objectAtIndex:index] ist kein NSDictionary.
  • fileName ( [[file.list objectAtIndex:index] objectForKey:@"soundName"] ) nicht ein NSString ist.

Denken Sie daran, dass der Klassenname, den Sie bei der Deklaration der Variablen verwenden, nur für den Compiler von Bedeutung ist; zur Laufzeit ist es einfach eine Variable, die einen Zeiger auf ein Objekt enthält. Das Objekt kann von jeder Klasse sein. Es ist durchaus zulässig, etwas, das kein NSString ist, in eine NSString * variabel; es birgt einfach ein sehr hohes (fast sicheres) Risiko eines falschen Verhaltens und/oder eines Absturzes kurz danach.

Ein solcher Absturz äußert sich in der Regel in Form einer "does not respond to selector"-Ausnahme (nachdem dem Objekt eine Nachricht gesendet wurde, auf die z. B. NSString-Objekte reagieren sollten, auf die das Objekt aber nicht reagiert, weil es kein NSString ist).

Welches Problem Sie auch immer haben, Sie können die der Debugger zu untersuchen.

0voto

mr.octobor Punkte 191

Entschuldigung für meinen Fehler. Ich erhalte Daten aus einer XML-Datei und diese Daten enthalten " \n " ja ich verstehe" \n "also ersetze ich mit @"" aber das reicht nicht aus, ich muss den Wert des Leerzeichens wieder abschneiden.

Danke für alle Ratschläge ^_^

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X