直到加载数据,TableViewController的表视图才会显示

问题描述

| 我面临一个奇怪的问题。我有一个用一些数据(fetchData)填充数组的方法(实际上很多,而且有点慢)。我正在使用数组构建表的行。 我试图在视图的构造中的不同时间在代码中的许多地方调用fetchData,但我似乎总是得到以下信息:显示黑屏,直到加载数组中的数据为止。我从以下位置调用了fetchData: (void)viewDidLoad; (void)viewWillAppear:(BOOL)动画; (void)viewDidAppear:(BOOL)动画; 由于我使用的是导航视图控制器,因此该应用似乎挂起看起来很糟糕,因为它卡在了黑屏上。我希望我的代码能够实现的是显示一个空表,并带有进度指示器,直到加载数据-然后刷新。不幸的是,我没有走这么远,因为无论我在哪里调用fetchData都不会加载视图。 帮助赞赏! 附言为了解决这个问题,我什至尝试使用TTTableViewController,但从不显示“加载”视图。典型。叹     

解决方法

您的加载方法必须阻止UI。您应该将其移至另一个线程,然后将数据加载到那里。您可以在ѭ0instant中实例化线程。 这是您需要使用的基本代码(使用GCD)
dispatch_queue_t downloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(downloadQueue,^{

    ... Move all the loading part here.

    dispatch_async(dispatch_get_main_queue(),^{
        ... Do all the UI updates,mostly,[tableView reloadData];
    })
})
    ,您可以在ѭ2to方法中添加计时器以延迟呼叫。例如:
- (void)viewDidAppear:(BOOL)animated {
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fetchData) userInfo:nil repeats:NO];
}
这将使您的应用有时间加载UI并启动加载屏幕,然后稍后开始获取数据。您也可以尝试在后台线程中获取数据     ,我在最初未加载表视图时遇到了同样的问题,但是它在我拥有的另一个.m文件中起作用。这是可行的: 将此添加到您的viewDidLoad中:
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
    NSLog(@\"Unresolved error %@,%@\",error,[error userInfo]);
    abort();
}
这是实现块:
#pragma mark -
#pragma mark Fetched results controller

- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController == nil) {
        // Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@\"OMFrackinG\" inManagedObjectContext:managedObjectContext];
        [fetchRequest setEntity:entity];
//分组和排序可选
        //NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@\"country\" ascending:YES];

        NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@\"state\" ascending:YES];// was name

        NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@\"name\" ascending:YES];

        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,sortDescriptor2,nil];

        [fetchRequest setSortDescriptors:sortDescriptors];
        propriate.

        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@\"state\" cacheName:nil];//@\"state\"
        aFetchedResultsController.delegate = self;
        self.fetchedResultsController = aFetchedResultsController;

        [aFetchedResultsController release];
        [fetchRequest release];
        [sortDescriptor1 release];
        [sortDescriptor2 release];
        [sortDescriptors release];
    }

    return fetchedResultsController;
}   
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...