1

1 つのビューコントローラーにいくつかの異なる uitableview を持たせようとしています。ここでの回答の1つの助けを借りて、私はそれを行い、各テーブルビューコントローラーを別々のファイルにセットアップすることができました. 現在の問題は、データがコアデータからロードされており、メインのテーブルビューに表示するのに十分な速度でロードされていないことです。データの読み込み後にリロードする必要があります。問題は、私が自動的にやろうとしていることです。私はスレッドをセットアップし、リリースが呼び出されると、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 が完了するのを待たずに続行します。どうすればこれを待つことができますか。

ありがとう!

4

0 に答える 0