【发布时间】:2012-04-19 17:53:47
【问题描述】:
这是一个相当简单的界面,只有 appdelegate 和 viewcontroller 处理事情。
我有一个 UITableView,它显示指定患者的 1 到 13 个图像缩略图。我正在使用包含单个 UIImageView 的自定义单元格来显示拇指。单元格中的 UIImageView 从通过 HTTP 请求加载的 NSMutableArray 加载到 cellForRowAtIndexPath 中。
HTTP 服务器上每位患者的拇指位于患者文件夹中,分为 1 - 3 个命名系列文件夹。当从 iPad 上的 popOver 中选择患者时,拇指表视图将加载 HTTP 服务器上患者文件夹中的第一个系列。
然后,用户可以从系列名称的弹出框中为患者选择不同的系列。此时通过 HTTP 请求检索所选系列的缩略图并将其加载到缩略图表视图中。
一切正常,除了我有一个患者,在从患者 popOver 挑选患者后检索到的第一个系列有效,但更改系列或重新选择已加载的系列会导致应用程序崩溃。它不会在模拟器中崩溃,只会在 iPad 上崩溃。从 xCode 运行时,我可以看到在最后一次调用 cellForRowAtIndexPath 完成后发生崩溃,控制台中没有显示任何错误。如果我越过那个点,它会立即崩溃。
我已经在 appdelegate 和 viewController 方法中实现了内存警告委托方法。我没有收到任何内存警告。
我在下面发布了我的 cellForRowAtIndexPath 方法,以防我在加载表格视图时遗漏了一些东西。
我正在寻找除了记忆之外还有什么值得怀疑的建议。在没有控制台的情况下,有什么方法可以让我知道是什么导致了崩溃?
提前感谢您的帮助
约翰
更新:我在 section 方法中添加了我的行数,这应该不是问题。
我现在确信问题不一定出在我的代码上,而是出在图像上。除了这个患者,我可以整天更换患者和/或患者图像系列而没有任何问题。与该患者相关的一张或多张图像正在占用 iPad 中的内存。每个患者有 1 或 2 张 X 射线,其原始大小在 1 到 2 兆字节之间。在将它们保存到磁盘文件以供 iPad 检索时,我将它们的文件大小(压缩质量)减小到 300kb 以下。单个系列中导入的总大小不超过 1.5mb。至少这是磁盘文件的总大小。一旦 iPad 获得文件大小,我不知道实际发生了什么。
在将导入的图像加载到表格视图进行显示之前,有什么方法可以测试它们的大小或损坏情况?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
ImageCell *cell = [thumbsTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.pImage.image = [thumbsArray objectAtIndex:indexPath.row];
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [thumbsArray count];
}
【问题讨论】:
-
检查
thumbsArray的大小并与tableView:numberOfRowsInSection:比较。您可能想在此处发布更多该代码供人们查看。 -
numberOfRowsInSection 应该不是问题,因为它正在返回 thumbsArray 计数。我很确定我的问题是由于图像太大或者我没有正确管理它们而导致的内存问题。有没有办法检查图像大小?
-
我将关于图像测试的问题添加到主要问题中。
标签: ipad uitableview crash