如何解决直到加载数据,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 举报,一经查实,本站将立刻删除。