我试图在一个视图控制器中有几个不同的 uitableviews。在此处的答案之一的帮助下,我能够做到这一点并将每个 tableviewcontroller 设置在单独的文件中。现在的问题是数据是从核心数据加载的,并且加载速度不够快,无法让主 tableview 显示它。我必须在数据加载后重新加载。问题是我正在尝试自动执行此操作。我设置了一个线程,当发布被调用时,应用程序在 uidocument 打开操作中崩溃。我不确定如何在数据加载完成之前让线程不被释放。这是一些代码。
[self.pplTableView setDelegate:self.peopleListController]; //pplTableView is the tableview in the mainviewcontroller that shows on the screen
[self.pplTableView setDataSource:self.peopleListController];
dispatch_queue_t fetchPpl = dispatch_queue_create("pplFetch", NULL);
dispatch_async(fetchPpl, ^{
self.peopleListController.view = self.peopleListController.tableView;
dispatch_async(dispatch_get_main_queue(),
^{
[self.pplTableView reloadData];
NSLog(@"rows %@",[self.pplTableView numberOfSections]);
});
});
dispatch_release(fetchPpl);
这是来自委托数据的 tableviewcontroller
- (void)viewDidLoad
{
[super viewDidLoad];
if(!self.peopleDatabase){
NSURL *url = [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
url = [url URLByAppendingPathComponent:@"Database"];
//NSLog(@"URL -> %@",url);
self.peopleDatabase = [[UIManagedDocument alloc]initWithFileURL:url];
}else {
[self useDocument];
}
}
-(void)useDocument{
if (self.peopleDatabase.documentState == UIDocumentStateClosed){
[self.peopleDatabase openWithCompletionHandler:^(BOOL success){
[self setupFetchResultsController];
}];
} else if (self.peopleDatabase.documentState == UIDocumentStateNormal){
[self setupFetchResultsController];
}
}
self.peopleListController.view = self.peopleListController.tableView;
当此行被调用时,控制器被加载并调用 useDocument。它不会等待 useDocument 完成继续。我怎么能让这个等待。
谢谢你!