Wer die folgende Fehlermeldung auf seinem Device (iPhone) bekommt, obwohl alles ohne Probleme lief im Simulator, der begibt sich auf eine unendliche Reise durch das Internet.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
*** Call stack at first throw:
(
0 CoreFoundation 0x3101b64f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x34b36c5d objc_exception_throw + 24
2 CoreFoundation 0x3101b491 +[NSException raise:format:arguments:] + 68
3 CoreFoundation 0x3101b4cb +[NSException raise:format:] + 34
4 Foundation 0x34869e2f -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 74
5 Foundation 0x3487c9cb +[NSURL(NSURL) fileURLWithPath:isDirectory:] + 34
Der Code sieht so aus:
NSURL* aFileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"beep" ofType:@"wav"] isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &_scanSuccessSound);
Dabei ist die Lösung relativ einfach. Es gibt ein Kontextmenü, in dem man einstellen kann, welcher Dateien auf das Device kopiert werden sollen. Dieses ist erreichbar über: rechte Maustaste auf Grups & Files oben links in Xcode und dann sollte das passende Häckchen dort gemacht werden.
Eine andere Fehlerquelle ist, dasss die Datei nicht in das Projektverzeichnis(Destination Folder) kopiert wurde, dies kann man durch löschen und erneutes einfügen der Datei in Xcode mit dem passenden ersten Häckchen wieder bereinigen.