线程在获取数据之前被释放。你知道为什么吗?

时间:2012-05-01 16:29:10

标签: objective-c ios objective-c-blocks

我试图在一个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完成继续。我怎么会这样等待。

谢谢!

0 个答案:

没有答案