我一直在多个平台上测试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视图。也许这里有人可以解决这个问题。
答案 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);
}