0

我正在使用一个包含缩略图的列表视图。我还使用网络服务来检索所有信息。

在我的 cellForRowAtIndexPath 方法中,我调用服务来检索记录,然后检查它是否附加了图像。这只是一个布尔值。然后,如果确实如此,我会使用不同的方法再次调用该服务以获取缩略图。所有逻辑似乎都已到位且顺序正确,但图像显示在错误的单元格中并且也重复了。

当我逐步调试代码时,它似乎会触发每个单元格的服务调用,而不是直接跳到下一行/单元格的响应操作。一旦填充了所有行,它就会进入响应。这对调试器来说正常吗?也许对服务的调用是异步的,这就是为什么?包含一个肥皂“库”,但它似乎没有在任何地方命名,而且它似乎没有执行异步请求,这对于这个应用程序来说是愚蠢的。我从第 3 方开发人员那里继承了这个项目。

此外,我是一个 .net 开发人员,并且习惯于 Visual Studio 调试器,所以这可能会导致一些问题。

抱歉,如果我的条款不正确,因为我对 ios 和 obj-c 还很陌生。

代码:获取图像的服务调用:

[service GetPictureThumbnail:self action:@selector(GetThumbResponse:) clientid: [AppDelegate clientID] commid:[UserSettings getInstance].selectedID mod:@"CCR" pkey:_ccr.l maxWidth:94 maxHeight:98];

获取拇指响应:

// Handle errors
if([value isKindOfClass:[NSError class]]) {
    NSLog(@"%@", value);
}

// Handle faults
if([value isKindOfClass:[SoapFault class]]) {
    NSLog(@"%@", value);
}


// Do something with the NSString* result
Picture_Object* result = (Picture_Object*)value;
NSLog(@"%@", result);
[_cell.imgThumb setImage:[UIImage imageWithData:result.e]];

单元格中的所有其他数据都很好,但图像是唯一不会包含在对服务的初始调用中的内容。

谢谢。

4

1 回答 1

1

根据我的经验,在 cellForRowAtIndexPath: 中进行处理并不好。

每次上下滚动时,单元格都会刷新并一遍又一遍地调用该方法,从而导致奇怪的不一致。填充单元格的最佳方法(再次,根据我的经验,这可能与每个人都不一致)是在您自己的方法中准备数组,以保存要在单元格中显示的数据。因此,当您调用 cellForRow: 时,您只会获得类似于以下内容的数据。

[imageArray objectAtIndex:[indexPath row]];

这样,当您上下滚动时,您只是从数组中挑选数据,并将它们显示在单元格中,而不是不断地进行网络请求。

在我开始在该方法之外处理我的数据之前,我遇到了各种各样的麻烦。希望我早点知道,会为我省去很多悲伤。

这可能不是您问题的直接答案,但它是处理 tableViews 的更好方法(尤其是当您的单元格/tableViews 开始变得复杂时)。

*edit:一定要在网络请求后调用下面的行,并将数据处理成数组。

[_tableView reloadData];
于 2013-08-12T22:14:13.603 回答