0

我一直在多个平台上测试 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];
}

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

4

1 回答 1

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);
}
于 2013-08-01T20:02:09.343 回答