1

私は先日それをテストしていて、それは働いていました。現在、このメソッドを呼び出した後、完了ブロックを呼び出すことはありません。

完了ブロックが呼び出されない場合はありますか? Apple が、何が起こっても常に呼び出されると言ったのを覚えています。

コードブロックは次のとおりです。

dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
            // Get ubiquitous url
            NSURL *ubiq = [[NSFileManager defaultManager]
                           URLForUbiquityContainerIdentifier:nil];
            NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:
                                         @"Documents"] URLByAppendingPathComponent:fileName];

            // Create new CloudFile
            CloudFile *file = [[CloudFile alloc]initWithFileURL:ubiquitousPackage];
            file.data = data;
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDocumentStateChanged:) name:UIDocumentStateChangedNotification object:file];             

            dispatch_async (dispatch_get_main_queue (), ^(void) {
                [file saveToURL:file.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {
                    NSLog(@"test");
                    if (success) {
                        [self sendEvent:ICLOUD_FILE_SAVE_SUCCESSFUL object:file];
                    } else {
                        [self sendEvent:ICLOUD_FILE_SAVE_FAILED];
                        NSLog(@"kaiCloud: Saving failed. (%@)",fileName);
                    }

                }];
            });

        });

編集: NSLog(@"test") を追加しましたが、ログに記録されていないことに注意してください。

4

1 に答える 1

1

同じ問題に遭遇しました(これがあなたの質問を見つけた方法です)。

理由は簡単です。テスト コードは、完了ハンドラーが呼び出されるのを待っていません。また、実行が完了するのも待ちません。

テストが十分に長いか、たまたま停止した場合、テストが機能することがあります。しかし、それは信頼できません。

ここで提供および説明されている WAIT マクロを使用して、問題を解決してください。

https://github.com/hfossli/AGAsyncTestHelper

于 2013-09-21T11:43:09.660 に答える