Программирование iPhone, не можете найти ресурс по пути? - PullRequest
1 голос
/ 08 марта 2011

Интересно, кто-нибудь из вас мог бы помочь с этой проблемой?Следующий код пытается получить доступ к аудиофайлу '4sSweepReverse.wav' по пути, определенному и содержащемуся в пути char *.Этот код работает абсолютно нормально при запуске в симуляторе, но не работает, когда он запускается на iphone?

//print out the file path
NSLog(@"FilePath: ");
NSLog(filePath);


//Cast filePath from NSString, to Char array pointer. Needed to get reference to audio file.
const char *path = [filePath cStringUsingEncoding:[NSString defaultCStringEncoding]];

//get a ref to the audio file, need one to open it
CFURLRef audioFileURL   = CFURLCreateFromFileSystemRepresentation (NULL, (const UInt8 *) path, strlen (path), false);

//open the audio file
OSStatus result = AudioFileOpenURL (audioFileURL, 0x03, kAudioFileWAVEType, &mAudioFile);

//were there any errors reading? if so deal with them first
if (result != noErr) {
    NSLog([NSString stringWithFormat:@"Could not open file: %s", filePath]);
    packetCount = -1;
}

Я знаю, что путь, содержащийся в файле, является правильным.Путь на симуляторе равен

/Users/sam2/Library/Application Support/iPhone Simulator/4.2/Applications/A355770A-6942-4E1F-BB8D-8A1B1906B42C/audioRecorder.app/4sSweepReverse.wav

И путь на iPhone равен

/var/mobile/Applications/2273E045-0A63-439E-A6AC-FD85CD30F7F2/audioRecorder.app/4sSweepReverse.wav

Но при отладке приложения, работающего на iPhone, я получаю ошибку -43 (найдено)?

Если кто-то может помочь, это было бы здорово!Sam

Ответы [ 3 ]

3 голосов
/ 08 марта 2011

Ух ты, теперь я чувствую себя немного идиотом!Спасибо за все ваши предложения, ребята, оказалось, что iPhone находил файл, но я открывал его с флагами разрешений «0x03», которые имеют разрешения на чтение / запись, и, очевидно, как ресурс, я могу получить к нему доступ только с «0x01».разрешения только для чтения.

Вот правильная строка кода:

    //open the audio file
OSStatus result = AudioFileOpenURL (audioFileURL, 0x01, kAudioFileWAVEType, &mAudioFile);

Еще раз, спасибо за вашу помощь !!

1 голос
/ 08 марта 2011

Является ли ресурс в проекте точным именем "4sSweepReverse.wav" и, возможно, не (например) "4ssweepreverse.wav" (все строчные буквы)?

В файловой системе устройства учитывается регистр, но имитаторэто не так.
См. Apple QA1697: Почему мое устройство не загружает нормально загруженный файл в симуляторе?

0 голосов
/ 08 марта 2011

Несколько вещей, которые вы можете попробовать -

  • Удалить, заново добавить ресурс
  • Очистить сборку.
  • Сбросить симулятор iPhone Использовать более простойили по крайней мере другое имя, пока вы не можете заставить это работать, что-то вроде a.wav возможно?Не уверен, что где-то кешируется копия ресурса.
  • Также не уверен, влияет ли на него какое-либо число, с которого начинается имя файла (возможно, нет, но, черт возьми, это может дать емуидти)
...