我有UITebleView
的服装UITableViewCells
。每次刷新它们时,内容都会重新排序。有谁知道为什么?
我正在从JSON中获取数据,我没有做某种排序,我只是根据TableViewCell indexpath.row显示数据
这是我设置UITableViewCell内容的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *costumeCell = @"Cell";
StoreCell *cell = [tableView dequeueReusableCellWithIdentifier:costumeCell];
if (!cell) {
cell = [[StoreCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:costumeCell];
}
NSDictionary *dict;
dict = [application objectAtIndex:indexPath.row];
[downloadQueue addOperationWithBlock:^{
name = [dict objectForKey:@"name"];
detileName = [dict objectForKey:@"detailName"];
itmsLink = [dict objectForKey:@"itms-serviceLink"];
icon = [dict objectForKey:@"icon"];
developer = [dict objectForKey:@"developer"];
version = [dict objectForKey:@"version"];
category = [dict objectForKey:@"category"];
rating = [dict objectForKey:@"rating"];
ratingNumbers = [dict objectForKey:@"ratingNumber"];
description = [dict objectForKey:@"description"];
developerEmails = [dict objectForKey:@"developerEmail"];
cell.AppName.text = name;
cell.category.text = category;
cell.rater.text = [NSString stringWithFormat:@"(%@)", ratingNumbers];
if ([rating intValue] == 1) {
cell.rating.image = [UIImage imageNamed:@"1.png"];
}
if ([rating intValue] == 2) {
cell.rating.image = [UIImage imageNamed:@"2.png"];
}
if ([rating intValue] == 3) {
cell.rating.image = [UIImage imageNamed:@"3.png"];
}
if ([rating intValue] == 4) {
cell.rating.image = [UIImage imageNamed:@"4.png"];
}
cell.itms = itmsLink;
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:icon]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* error){
if(error)
{
// Error Downloading image data
cell.AppIcon.image = [UIImage imageNamed:@"placeholder.png"];
}
else
{
[cell.AppIcon setImage:[UIImage imageWithData:data]];
}
}];
cell.AppIcon.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:icon]]];
cell.number.text = [NSString stringWithFormat:@"%li", (long)indexPath.row + 1];
}];
cell.AppIcon.layer.masksToBounds = YES;
cell.AppIcon.layer.cornerRadius = 16.0;
cell.installButton.layer.masksToBounds = YES;
cell.installButton.layer.cornerRadius = 5.0f;
cell.installButton.layer.borderColor = [UIColor darkGrayColor].CGColor;
cell.installButton.layer.borderWidth = 1.0f;
return cell;
}
答案 0 :(得分:0)
由于您是从JSON获取的,因此您获得它的服务器可能不会为您排序数据。如果没有你泄露到服务器的API中,我们就不可能知道它在做什么。
从服务器接收新数据后,您可以执行以下操作,而无需提供更多信息:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortedApplicationArray = [application sortedArrayUsingDescriptors:@[descriptor]];
application = sortedApplicationArray;
只是不要将那些代码放在你的cellForRowAtIndexPath中,因为每次创建一行时它都会排序!
我想我知道问题所在。
您的cellForRowAtIndexPath中有异步操作。您应该直接使用dict对象和操作队列外部设置单元格UI元素。
唯一需要异步完成的是图像下载。我建议您使用github中的SDWebImage,它在自己的队列中处理下载并将映像缓存在内存和磁盘上。