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



我一直在多个平台上测试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视图设置不正确。也许这里有人能对这个问题有所了解。

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


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

最新更新