iPhone编程,在路径上找不到资源?

时间:2011-03-08 16:34:04

标签: ios4 resources ios-simulator

我想知道你们中是否有人可以帮助解决这个问题。以下代码尝试在确定并包含在char *路径中的路径位置访问音频文件“4sSweepReverse.wav”。在模拟器中运行时,此代码可以正常工作,但在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错误(或找不到文件)?

如果有人能提供帮助那就太棒了! 萨姆

3 个答案:

答案 0 :(得分:3)

哇,我觉得现在有点白痴!感谢所有你的建议,结果是iPhone正在找到该文件,但我用权限标志'0x03'打开它,这是读/写权限,显然作为资源我只能用'0x01'访问它只读权限。

以下是正确的代码行:

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

再次感谢您的帮助!!

答案 1 :(得分:1)

项目中的资源是否完全命名为“4sSweepReverse.wav”而不是(例如)“4ssweepreverse.wav”(全部小写)?

设备文件系统区分大小写,但模拟器不是 请参阅Apple QA1697:Why doesn't my device load a file that loads fine in the Simulator?

答案 2 :(得分:0)

您可能想要尝试的一些事项 -

  • 删除,重新添加资源
  • 清洁构建。
  • 重置iPhone模拟器使用更简单或至少一个不同的名称,直到您可以使用它, 像a.wav这样的东西可能吗?不确定是否正在某处缓存资源的副本。
  • 也不确定是否有一个数字来启动文件名对它有任何影响(可能不是,但是到底是什么,不妨给它一个去)