IOS - 没有崩溃信息的意外崩溃

时间:2013-08-01 19:49:16

标签: iphone ios debugging crash

我一直在多个平台上测试IOS应用程序,并且在iPhone 4S上进行测试时发现了一些奇怪的行为。在执行适用于iPhone 5和iPhone 3S的任务后,应用程序崩溃。发生崩溃时,调试器上没有显示任何内容,Xcode中绝对没有出现崩溃日志或内存警告。我隔离了代码块,以及负责崩溃的特定行。我仍然不明白为什么会发生这种情况或如何找到解决方案。该代码是一个更大的方法的一部分,该方法下载大量图像并在UIImageViews中显示它们。这是代码:

//fill image tiles with images
for (int i = 0; i < [objects count]; ++i)
{
    PFObject *imageObject = [objects objectAtIndex:i];
    PFFile *imageFile = (PFFile *)[imageObject objectForKey:@"image"];
    UIImageView *imageHolder = (UIImageView *)[self.view viewWithTag:(100 + i)];

    imageHolder.image = [UIImage imageWithData:imageFile.getData];
}

代码循环遍历已从服务器加载图像文件的对象。要为每个图像分配的UIImageViews标记为100 - 104,因此可以使用循环索引变量访问它们。第UIImageView *imageHolder = (UIImageView *)[self.view viewWithTag:(100 + i)]行从主视图中提取UIImageViews。在下一行中,imageHolder视图被分配了一个图像,这是导致崩溃的行,并且当注释掉时,视图会加载而不会失败。我无法确定为什么会发生这种情况,或者是否是没有正确设置的imageFile或imageHolder视图。也许这里有人可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

您应该在imageFile.getData附近获得一些保护,因为它可能会返回nil。您最好使用getData:方法,该方法返回一个错误,如果无法访问数据,您可以使用该错误。


NSError *error = nil;
NSData *imageData = [imageFile getData:&error];

if (imageData != nil) {
    imageHolder.image = [UIImage imageWithData:imageData];
} else {
    NSLog(@"OMG!! %@", error);
}