Objective c 目标C-块代码未按顺序执行?

Objective c 目标C-块代码未按顺序执行?,objective-c,ios,uitableview,client-server,afnetworking,Objective C,Ios,Uitableview,Client Server,Afnetworking,我试图在单元格进入视图时将数据加载到应用程序中,这样,一旦按下单元格的附件按钮,就会加载数据 我的问题是我正在使用AFNetworking,我正在使用以下代码块: [Request fullRequestWithBlock:^(NSArray *detailedReqFromWeb, NSError *error) { if (error) { [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@

我试图在单元格进入视图时将数据加载到应用程序中,这样,一旦按下单元格的附件按钮,就会加载数据

我的问题是我正在使用AFNetworking,我正在使用以下代码块:

[Request fullRequestWithBlock:^(NSArray *detailedReqFromWeb, NSError *error) {
        if (error) {

            [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
        } else {

            NSArray *objs = [NSArray arrayWithObjects: [detailedReqFromWeb objectAtIndex: 0], [detailedReqFromWeb objectAtIndex: 1], [detailedReqFromWeb objectAtIndex: 2], [detailedReqFromWeb objectAtIndex: 3], [detailedReqFromWeb objectAtIndex: 4], [detailedReqFromWeb objectAtIndex: 5], nil];
            NSArray *keys = [NSArray arrayWithObjects:@"Risk", @"Destination", @"Source", @"Customer", @"Subcategory", @"Deployment", nil];

            NSMutableDictionary *detailsforRequestDictionary = [[NSMutableDictionary alloc] initWithObjects:objs forKeys:keys];

            [request addEntriesFromDictionary: detailsforRequestDictionary];

            NSLog(@"%@ Finished Loading", [idNumbers objectAtIndex:row]);
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        }

    } forID: [[idNumbers objectAtIndex:row] substringFromIndex:1]];
因此,基本上,我正在尝试在加载数据后将附件类型从指示器更改为披露按钮,这样我就可以执行到另一个视图的切换,在该视图中显示我加载的数据

我的问题是,它在完成加载之前将cell.accessoryType更改为按钮。调试NSLog在实际完成加载时实际输出

只有在完成加载后才启用按钮的最佳方式是什么?我猜主线程没有处理请求。为什么会通知我请求已完成处理,以便我可以切换AccessoryType


谢谢

除非您不回收单元格,否则您永远不应该保留单元格引用,因为它所代表的数据将随着用户滚动而改变。正确的方法是在主队列上调度一个块,以节/行坐标更新表条目。然后,代码检查该单元格是否可见,然后对其进行更新。它还将以其他方式记录状态,以便在表格滚动时应用正确的状态。

除非您不回收单元格,否则您永远不应保留单元格引用,因为它所表示的数据将随着用户滚动而更改。正确的方法是在主队列上调度一个块,以节/行坐标更新表条目。然后,代码检查该单元格是否可见,然后对其进行更新。它还会以其他方式记录状态,以便在表格滚动时应用正确的状态。

+1要获得正确答案,有时很难理解,但提醒OP异步操作可能会发生,并且将完全不受触发操作的约束,这一点非常重要。只要疯狂地滚动,你就会看到回调(块)将在单元格不可见的时候执行。我同意你的说法。您会推荐什么解决方案?我如何知道回调何时完成,以便重新加载该单元格?您要做的是向表询问其可见单元格。如果与该图像相关的单元格位于数组中,则可以使用数组中的单元格本身直接更新该单元格。您可以向表中询问indexPathFoCell:获取每个.1的索引路径以获得正确答案-有时很难理解,但提醒OP异步操作可能发生,并且将完全不受触发操作的约束,这一点非常重要。只要疯狂地滚动,你就会看到回调(块)将在单元格不可见的时候执行。我同意你的说法。您会推荐什么解决方案?我如何知道回调何时完成,以便重新加载该单元格?您要做的是向表询问其可见单元格。如果与该图像相关的单元格位于数组中,则可以使用数组中的单元格本身直接更新该单元格。您可以向该表请求indexPathFoCell:以获取每个的索引路径。