Ios 未运行NSArray代码

Ios 未运行NSArray代码,ios,objective-c,arrays,Ios,Objective C,Arrays,我想不出这个,希望有人能帮忙 这是我的ViewController.h文件中的代码 { NSArray *bgImages; int currentBackground; bool hasShrunk; bool hasMoved; CGAffineTransform translate; CGAffineTransform sizeShrink; CGAffineTransform sizeGrow; } 下面是我在ViewController.m文件中的一些代码 - (void)view

我想不出这个,希望有人能帮忙

这是我的ViewController.h文件中的代码

{
NSArray *bgImages;
int currentBackground;
bool hasShrunk;
bool hasMoved;

CGAffineTransform translate;
CGAffineTransform sizeShrink;
CGAffineTransform sizeGrow;
}
下面是我在ViewController.m文件中的一些代码

- (void)viewDidLoad {
hasMoved = NO;
hasShrunk = NO;
currentBackground = 0;

bgImages = [[NSArray alloc] initWithObjects:
        [UIImage imageNamed:@"WallPaper_01.png"],
        [UIImage imageNamed:@"WallPaper_02.png"],
        [UIImage imageNamed:@"WallPaper_03.png"],
        [UIImage imageNamed:@"WallPaper_04.png"],
        [UIImage imageNamed:@"WallPaper_05.png"],
        nil];

sizeShrink = CGAffineTransformMakeScale(.25,.25);
sizeGrow = CGAffineTransformMakeScale(1,1);

_myBackground.image = [bgImages objectAtIndex:currentBackground];
}
问题就在这里。这段代码和整个项目在模拟器上运行良好,没有问题。当我将输出更改为实际的iPhone设备时,它会失败。代码在分配名为bgImages的数组时失败。如果我在viewDidLoad上放置一个断点并逐行进入它,它将执行到数组分配行,然后跳过它。然后尝试执行该行时:

_myBackground.image = [bgImages objectAtIndex:currentBackground];

它将失败,因为数组为空。我不明白这怎么能在模拟器上工作,但在实际设备上却不行。代码看起来并没有错误,但我仍在绞尽脑汁试图理解它为何会以这种方式运行。我是否编码错误?

您遇到了问题,因为数组中没有任何元素。一种可能性是所有[UIImage ImageName:…]调用都返回nil。将其中一项作为单独的变量,例如

UIImage *firstImage = [UIImage imageNamed:@"WallPaper_01.png"];
并在该行上设置断点,以确保正确初始化映像。如果不是,一个可能的原因是你有2x版本的壁纸_01@2x.png但不是1x版本,反之亦然


编辑:正如@rdelmar所指出的,另一个可能的原因是,由于Mac OS X默认使用不区分大小写的文件系统,而iOS使用区分大小写的文件系统,因此您使用了错误的文件名,但是,您只在iOS上看到了一个问题,因为OS X不关心文件名是否完全正确。

您遇到了一个问题,因为数组中没有任何元素。一种可能性是所有[UIImage ImageName:…]调用都返回nil。将其中一项作为单独的变量,例如

UIImage *firstImage = [UIImage imageNamed:@"WallPaper_01.png"];
并在该行上设置断点,以确保正确初始化映像。如果不是,一个可能的原因是你有2x版本的壁纸_01@2x.png但不是1x版本,反之亦然


编辑:正如@rdelmar所指出的,另一个可能的原因是,由于Mac OS X默认使用不区分大小写的文件系统,而iOS使用区分大小写的文件系统,因此您使用了错误的文件名,但您只在iOS上看到了一个问题,因为OS X不关心文件名是否完全正确。

您似乎正在加载所有图像,然后就用一个。这可能会导致实际设备中的内存问题。你可能想做的事情是这样的

bgImages = [[NSArray alloc] initWithObjects:
            [@"WallPaper_01.png"],
            [@"WallPaper_02.png"],
            [@"WallPaper_03.png"],
            [@"WallPaper_04.png"],
            [@"WallPaper_05.png"],
                             nil];   
...
_myBackground.image = 
     [UIImage imageNamed:[bgImages objectAtIndex:currentBackground]];

另外,看看@rdelmar关于区分大小写的评论。

您似乎正在加载所有图像,然后只使用一个。这可能会导致实际设备中的内存问题。你可能想做的事情是这样的

bgImages = [[NSArray alloc] initWithObjects:
            [@"WallPaper_01.png"],
            [@"WallPaper_02.png"],
            [@"WallPaper_03.png"],
            [@"WallPaper_04.png"],
            [@"WallPaper_05.png"],
                             nil];   
...
_myBackground.image = 
     [UIImage imageNamed:[bgImages objectAtIndex:currentBackground]];

另外,看看@rdelmar关于区分大小写的评论。

确切的错误是什么?\u myBackground是否已初始化?另外,NSarray是一个拼写错误,应该是NSarray。您的代码是否真的用小写字母a表示NSarray?那可能是个问题。对不起。。这是一个输入错误,因为我在这个网站上输入了代码。我得到的错误是***由于未捕获的异常“NSRangeException”而终止应用程序,原因***-[\uu NSArrayI objectAtIndex:]:索引0超出空数组的界限“检查图像名称的大小写。模拟器可以容忍大小写差异,但设备不能。图像位于项目文件夹中,但似乎您尚未将其添加到项目中。在xcode导航器中,向项目添加文件。确切的错误是什么?\u myBackground是否已初始化?另外,NSarray是一个拼写错误,应该是NSarray。您的代码是否真的用小写字母a表示NSarray?那可能是个问题。对不起。。这是一个输入错误,因为我在这个网站上输入了代码。我得到的错误是***由于未捕获的异常“NSRangeException”而终止应用程序,原因***-[\uu NSArrayI objectAtIndex:]:索引0超出空数组的界限“检查图像名称的大小写。模拟器可以容忍大小写差异,但设备不能。图像位于项目文件夹中,但似乎您尚未将其添加到项目中。在xcode navigator中,向项目添加文件。您可以尝试不使用图像扩展名[UIImage ImageName:@WallPaper\u 01]这就是问题所在。图像文件名的大小写不正确。我不相信我花了几个小时看这个,我觉得自己像个白痴!!谢谢你帮助我增加知识。是的,我已经被图像文件名的大小写所困扰了。谢天谢地,我马上就意识到了这种综合症,并且知道该去哪里看。你可以不使用图像扩展名[UIImage imagename:@wallpaper01]试试,这就是问题所在。图像文件名的大小写不正确。我不相信我花了几个小时看这个,我觉得自己像个白痴!!谢谢你帮助我增加知识。是的,我已经被图像文件名的大小写所困扰了。谢天谢地,我马上就认出了这种综合症
但我知道该去哪里找,谢谢。文件中还有其他代码,当按下按钮更改背景图片时,该代码会遍历数组并增加计数器。为了清晰起见,我不想发布整个文件。谢谢你的评论。谢谢。文件中还有其他代码,当按下按钮更改背景图片时,该代码会遍历数组并增加计数器。为了清晰起见,我不想发布整个文件。谢谢你的评论。