我的项目中有一组像这样的图像,
我正试图将它们全部放入一个可变数组中,就像这样,
NSMutableArray *imageArray = [[[NSMutableArray alloc] initWithCapacity:36] retain];
for (int i = 0; i < 36; i++) {
UIImage *image = [[UIImage imageNamed:[NSString stringWithFormat:@"quicktour_%d.JPG",i+1]] autorelease];
[imageArray addObject:image];
}
这在模拟器中运行得很好,但在添加5张图像后在设备中运行时会崩溃。
这是一个非ARC项目。我在SO上经历了所有类似的问题并尝试了那里发布的解决方案,但我的问题仍然存在。
有人可以帮帮我吗?
提前致谢。
编辑:
这是崩溃时在控制台中显示的输出。
*****由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' * - [__ NSArrayM insertObject:atIndex:]:object不能为nil' * 第一次抛出调用堆栈:(0x2f784f4b 0x39bc56af 0x2f6bec81 0x138987 0x31f2c713 0x31f2c6b3 0x31f2c691 0x31f1811f 0x31f2c107 0x31f2bdd9 0x31f26e65 0x31efc79d 0x31efafa3 0x2f750183 0x2f74f653 0x2f74de47 0x2f6b8c27 0x2f6b8a0b 0x343df283 0x31f5c049 0x1f9ab 0x3a0cdab7) libc ++ abi.dylib:以未捕获的类型异常终止 NSException **
答案 0 :(得分:3)
根据文档,传递给addObject:
的对象不得为nil 。机会是您的第五个图像被命名为大写与您要求的大小不匹配,因此imageNamed:
调用返回nil。 iOS文件系统区分大小写,但OS X文件系统(通常)不是;只出现在设备上的问题通常与这一事实有关。
您可以修复文件名以防止崩溃,但在将对象添加到阵列之前,您应该确实将代码检查为nil。
答案 1 :(得分:1)
我会将您的代码更改为:
NSMutableArray *imageArray = [[[NSMutableArray alloc] initWithCapacity:36] retain];
for (int i = 0; i < 36; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"quicktour_%d.JPG",i+1]];
[imageArray addObject:image];
[image release];
image = nil;
}