我试图在一个viewcontroller中有一些不同的uitableviews。借助其中一个答案,我能够做到这一点并在单独的文件中设置每个tableviewcontroller。现在的问题是数据是从核心数据加载的,并且它的加载速度不足以让主表视图显示它。我必须在数据加载后重新加载。问题是我正在尝试自动执行此操作。我设置了一个线程,当发布被调用时,应用程序崩溃了uidocument open操作。我不确定如何在数据加载完成之前让线程不释放。这是一些代码。
[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完成继续。我怎么会这样等待。
谢谢!