Ios [self.tableview重载数据];引起闪烁

Ios [self.tableview重载数据];引起闪烁,ios,tableview,reloaddata,Ios,Tableview,Reloaddata,问题是UI出现然后被更新:给人一种闪烁的感觉 我希望用户进入应用程序时,UI只更新一次,因此我在ViewDidLoad中添加了重载。。这是密码。。任何帮助如何删除此闪烁。。。一些代码示例会有所帮助 - (void)viewDidLoad { [super viewDidLoad]; self.myTableView.dataSource = self; self.myTableView.delegate = self; PFQuery * getCollectionInfo = [PFQ

问题是UI出现然后被更新:给人一种闪烁的感觉

我希望用户进入应用程序时,UI只更新一次,因此我在ViewDidLoad中添加了重载。。这是密码。。任何帮助如何删除此闪烁。。。一些代码示例会有所帮助

- (void)viewDidLoad { 

[super viewDidLoad];

self.myTableView.dataSource = self;
self.myTableView.delegate = self;

PFQuery * getCollectionInfo = [PFQuery queryWithClassName:@"Collection"];   // make query

[getCollectionInfo orderByDescending:@"updatedAt"];
[getCollectionInfo setCachePolicy:kPFCachePolicyCacheThenNetwork];

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    [getCollectionInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            CollectionQueryResult = (NSMutableArray *)objects;
                [self.tableView reloadData];


            // whenevr get result
        }
        else{
            //no errors
        }


    }];
});

希望以下几行可以帮助您解决延迟和闪烁的问题

dispatch_async(dispatch_get_main_queue()
                   , ^{
 [self.tableView reloadData];

 });

您的下载是异步的,因此在显示视图之前无法完成。因此,
CollectionQueryResult
中的所有内容都将显示出来

你可以:

  • 清除
    CollectionQueryResult
    以便在获得更新之前不会填充表
  • 比较
    CollectionQueryResult
    对象
    ,然后仅更新数据已更改的可见单元格(在设置
    CollectionQueryResult
    之前)
  • 请注意,对于选项2,您还需要比较
    CollectionQueryResult
    对象的计数,然后根据需要从表视图中插入/删除行。选项2的全部要点是不调用
    重新加载数据
    ,因此您需要做更多的工作


    如果您获取可见单元格并直接更新它们(这样可以避免任何动画发生),也可以避免调用
    reloadRowsAtIndexPaths
    。请参阅。

    为什么不直接调用reloadSections方法而不是[self.tableView reloadData]

    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
    

    请参阅
    cellforrowatinexpath
    delegate方法。你可能正在做一些可能会导致轻弹的操作。在我的例子中,我使用动画设置图像视图的图像。因此,每当我重新加载表格时,它都会因为动画而闪烁


    我删除了那个动画并为我工作

    您的问题是什么,请详细说明您的问题。问题是UI出现后会被更新:产生闪烁的影响。我要求更新单元格时不要使整个TableView闪烁。。我引用了这一点,但实际上没有帮助。默认情况下,tableview仅重新加载可见单元格。我知道我需要这样做[self.tableView重新加载rowsatindexpaths:[self.tableView indexPathsForVisibleRows]带行动画:uitableview行动画无];'但这会产生一个错误:“NSInternalInconsistencyException”,原因:“无效更新:节0中的行数无效。这将停止后台线程相关的崩溃,但不是刷新闪烁。我知道我需要这样做<代码>[self.tableView重新加载rowsatindexpaths:[self.tableView indexPathsForVisibleRows]带行动画:uitableview行动画无]但这会产生错误:“NSInternalInconsistencyException”,原因:“无效更新:节0中的行数无效。如何处理此错误,因为我没有手动传递行数。行数在委托方法中返回。如果更新
    CollectionQueryResult
    则需要调用
    reloadRowsAtIndexPaths
    insertRowsAtIndexPaths
    deleteRowsAtIndexPaths
    ,这是基于
    CollectionQueryResult
    的新旧内容之间的差异,但tableview上的图像仍在闪烁。