每次刷新时,为什么我的UITabeViewContent重新排序?

时间:2013-10-19 21:54:58

标签: ios xcode uitableview

我有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;
}

1 个答案:

答案 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,它在自己的队列中处理下载并将映像缓存在内存和磁盘上。