Macos 如何在my.app中引用hello.bmp?

Macos 如何在my.app中引用hello.bmp?,macos,xcode,Macos,Xcode,我正在学习关于SDL的lazyfoo教程,我正在学习第1课,在屏幕上获取图像,但是SDL给了我“无法加载hello.bmp”,我不知道为什么 我正在使用OSX、Xcode 3.2和他们网站上最新版本的SDL 我怀疑这与没有将hello.bmp图像正确加载到Xcode有关,但我遵循了教程,进一步的谷歌搜索并没有产生任何有用的结果。有人知道如何进一步排除故障吗 编辑:它似乎与相对路径有关。还是不确定哪一部分出了问题 编辑:我已经了解到,通过转到Project->Edit Active Executa

我正在学习关于SDL的lazyfoo教程,我正在学习第1课,在屏幕上获取图像,但是SDL给了我“无法加载hello.bmp”,我不知道为什么

我正在使用OSX、Xcode 3.2和他们网站上最新版本的SDL

我怀疑这与没有将hello.bmp图像正确加载到Xcode有关,但我遵循了教程,进一步的谷歌搜索并没有产生任何有用的结果。有人知道如何进一步排除故障吗

编辑:它似乎与相对路径有关。还是不确定哪一部分出了问题

编辑:我已经了解到,通过转到Project->Edit Active Executable并将工作目录设置为“Project Directory”现在可以工作,但我不明白为什么它不会在.app中加载hello.bmp。我错过了什么

编辑:下面是lazyfoo第01课的源代码,根据要求提供。这是我使用的字符对字符的代码,如果您需要有关我的XCode(3.2版)的任何信息,请告诉我

/*This source code copyrighted by Lazy Foo' Productions (2004-2012)
and may not be redestributed without written permission.*/

//Include SDL functions and datatypes
#include "SDL/SDL.h"

int main( int argc, char* args[] )
{
    //The images
    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;

    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    //Set up screen
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );

    //Load image
    hello = SDL_LoadBMP( "3.app/Contents/Resources/hello.bmp" );

    //Apply image to screen
    SDL_BlitSurface( hello, NULL, screen, NULL );

    //Update Screen
    SDL_Flip( screen );

    //Pause
    SDL_Delay( 2000 );

    //Free the loaded image
    SDL_FreeSurface( hello );

    //Quit SDL
    SDL_Quit();

    return 0;
}

我发现,通过将lesson01源代码中的“hello.bmp”替换为“X.app/Contents/Resources/hello.bmp”,其中X是您的XCode项目的名称,即使将.app复制到桌面并在那里运行,也可以正确引用生成的应用程序

另外,不要忘记将hello.bmp添加到XCode项目。

这是不正确的:

SDL_LoadBMP( "3.app/Contents/Resources/hello.bmp" );

您应该通过调用
[[NSBundle mainBundle]pathForResource:@“bmp”类型的“hello”]
来获取应用程序包中资源的路径,它将返回一个
NSString
对象,其中包含与该资源对应的文件的绝对路径。

堆栈溢出时应询问此问题,但是如果没有你的代码,它会很快关闭。编辑以包含您的代码,我将进行迁移。添加了源代码,抱歉,如果不在每行开头手动添加四个空格,则无法正确设置其格式。我确信我记得有一种使用一两行代码的方法,但如果有,现在就不见了。注意,这种解决方案不是跨平台的,因此并不理想。您的问题被标记为
osx
,您正在询问如何访问Mac应用包中的文件。如果您也在为Linux开发,那么您需要包含更多关于您正在做什么以及正在使用哪些框架的信息,因为您的问题根本不适用于典型的Linux应用程序。