Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在uitableview中一秒钟后加载数据。有没有其他方法可以消除这种延迟_Ios_Objective C_Uitableview_Grand Central Dispatch_Reload - Fatal编程技术网

Ios 在uitableview中一秒钟后加载数据。有没有其他方法可以消除这种延迟

Ios 在uitableview中一秒钟后加载数据。有没有其他方法可以消除这种延迟,ios,objective-c,uitableview,grand-central-dispatch,reload,Ios,Objective C,Uitableview,Grand Central Dispatch,Reload,这是在Objective C中处理数据和重新加载表的正确方法吗?如果是,那么在查看tableview上的数据时仍然会看到一些延迟。我有什么办法可以消除这种延误吗?顺便说一下,这是我故事板中的第二个屏幕。你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟 执行此操作时应遵循的一些一般规则: 正在进行服务器调用时,在屏幕上显

这是在Objective C中处理数据和重新加载表的正确方法吗?如果是,那么在查看tableview上的数据时仍然会看到一些延迟。我有什么办法可以消除这种延误吗?顺便说一下,这是我故事板中的第二个屏幕。

你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟

执行此操作时应遵循的一些一般规则:

  • 正在进行服务器调用时,在屏幕上显示加载覆盖
  • 返回数据后,将其传递到主线程上的表视图。现在移除加载覆盖
  • 不要在
    cellForRowAtIndexPath:
    方法中执行繁重的操作
  • 作为旁注,虽然相同的东西,但尝试一次与以下,如果你是遵循以上所有的指导方针

       NSURL *url=[NSURL URLWithString:string];
        dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.workQueue", DISPATCH_QUEUE_SERIAL);    
        dispatch_async(backgroundQueue, ^{
            NSData *data=[NSData dataWithContentsOfURL:url];
            NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            NSLog(@"%@",json);
            marray=[NSMutableArray array];
            for (NSDictionary *dict in json) {
    
            }
            dispatch_async(dispatch_get_main_queue(), ^{  
                [self.tableView reloadData];
            });
        });
    

    你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟

    执行此操作时应遵循的一些一般规则:

  • 正在进行服务器调用时,在屏幕上显示加载覆盖
  • 返回数据后,将其传递到主线程上的表视图。现在移除加载覆盖
  • 不要在
    cellForRowAtIndexPath:
    方法中执行繁重的操作
  • 作为旁注,虽然相同的东西,但尝试一次与以下,如果你是遵循以上所有的指导方针

       NSURL *url=[NSURL URLWithString:string];
        dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.workQueue", DISPATCH_QUEUE_SERIAL);    
        dispatch_async(backgroundQueue, ^{
            NSData *data=[NSData dataWithContentsOfURL:url];
            NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            NSLog(@"%@",json);
            marray=[NSMutableArray array];
            for (NSDictionary *dict in json) {
    
            }
            dispatch_async(dispatch_get_main_queue(), ^{  
                [self.tableView reloadData];
            });
        });
    

    你似乎一切都做对了。将您的队列更改为
    DISPATCH\u queue\u CONCURRENT
    ?我真的看不出您可以避免延迟,因为您的
    tableView
    正在等待数据在刷新之前进入,这可能需要一秒钟的时间。开发人员可能会使用“加载”循环向用户显示您正在检索的内容。在后台线程上运行网络任务,然后在主线程上调度UI刷新,这样做是正确的。@rb612…我尝试使用并发队列,但结果是一样的。您可以在上一个视图控制器中单击按钮,或者在用户转到此VC之前的某个点上,你可以得到数据,然后把它从你的第一个VC传给第二个VC。你似乎做的每件事都是对的。将您的队列更改为
    DISPATCH\u queue\u CONCURRENT
    ?我真的看不出您可以避免延迟,因为您的
    tableView
    正在等待数据在刷新之前进入,这可能需要一秒钟的时间。开发人员可能会使用“加载”循环向用户显示您正在检索的内容。在后台线程上运行网络任务,然后在主线程上调度UI刷新,这样做是正确的。@rb612…我尝试使用并发队列,但结果是一样的。您可以在上一个视图控制器中单击按钮,或者在用户转到此VC之前的某个点上,您可以获取数据,然后将其从第一个VC传递到第二个VC。