ブロックの扱い方がわかりません。たとえば、viewDidLoad で関数「useDocument」を呼び出して Core Data をセットアップしました。Core Data を使用する準備が整い次第、何らかのクエリを処理するために別の関数が呼び出されることを願っています。ASIHTTPRequestと同様 に、クライアントが応答を受信すると、関数が呼び出されて応答が処理されます。
関数をトリガーすることは、ブロックを操作する正しい方法ではないと思います。しかし、正しい方法は何ですか?
- (void)useDocument
{
if (!self.database) {
self.database = [DataModelDocument sharedDocument];
}
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.database.fileURL path]]) {
// does not exist on disk, so create it
[self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
if (!success) {
NSLog(@"database doesn't exist on disk, we fail to create it");
}
}];
} else if (self.database.documentState == UIDocumentStateClosed) {
// exists on disk, but we need to open it
[self.database openWithCompletionHandler:^(BOOL success) {
if (!success) {
NSLog(@"database exists on disk, but we fail to open it");
}
}];
} else if (self.database.documentState == UIDocumentStateNormal) {
// already open and ready to use
}
}