微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决直到加载数据,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;
}   
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。