Ios NSMutableArray addObject在设备中崩溃,但在模拟器中运行正常
我的项目中有一组这样的图像 我想把它们都放到一个可变数组中,就像这样Ios NSMutableArray addObject在设备中崩溃,但在模拟器中运行正常,ios,objective-c,memory-management,memory-leaks,nsmutablearray,Ios,Objective C,Memory Management,Memory Leaks,Nsmutablearray,我的项目中有一组这样的图像 我想把它们都放到一个可变数组中,就像这样 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]] a
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];
}
NSMutableArray*imageArray=[[NSMutableArray alloc]initWithCapacity:36]retain];
对于(int i=0;i<36;i++){
UIImage*image=[[UIImage ImageName:[NSString stringWithFormat:@“quicktour_u%d.JPG”,i+1]]自动释放];
[imageArray addObject:image];
}
这在模拟器中运行得很好,但在添加了5幅图像后在设备中运行时崩溃
这是一个非ARC项目。我在这里讨论了所有类似的问题,并尝试了发布在那里的解决方案,但我的问题仍然存在
谁能帮帮我吗
提前谢谢
编辑:
这是崩溃时控制台中显示的输出
*****由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“*-[\uu NSArrayM”
insertObject:atIndex::对象不能为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:以类型为的未捕获异常终止
N例外**
根据文档,传递给
addObject:
的对象不能为零。很可能您的第五个图像的名称与您要求的大小写不匹配,imageNamed:
调用因此返回nil。iOS文件系统区分大小写,但OSX文件系统(通常)不区分大小写;仅出现在设备上的问题通常与此相关
您可以修复文件名以防止崩溃,但在将对象添加到数组之前,您确实应该让代码检查nil
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;
}
NSMutableArray*imageArray=[[NSMutableArray alloc]initWithCapacity:36]retain];
对于(int i=0;i<36;i++){
UIImage*image=[UIImage ImageName:[NSString stringWithFormat:@“quicktour_u%d.JPG”,i+1]];
[imageArray addObject:image];
[图片发布];
图像=零;
}
您能提供崩溃日志吗?粘贴您的崩溃日志。我想这是因为设备内存溢出。您在运行时添加了太多内存(请检查图像大小)。您过度释放了图像(ImageName:已返回自动释放的图像,无需自动释放),并且过度保留了图像数组(init方法返回的对象的保留计数为+1,并且不会自动释放)。重新阅读Apple文档中的手动内存管理规则。关于nil问题,其他的海报可能是对的,但它对你没有任何帮助,因为在一天结束的时候,你会有一个包含垃圾值的数组。就是这样!伙计,我在拔头发。非常感谢!:)您的代码与OP的问题相同,即如果-imagename:
返回nil,它将崩溃,如果请求的映像不可用,它将执行此操作。在添加到数组之前检查nil。