3

次の設定があります: 私のアプリは UIDocument インスタンスを iCloud に書き込みます。ファイルが同期され、すべて正常に動作します。しかし、それらを削除しようとすると、再び表示され続けます。ファイルを削除する前に、ファイルを閉じます。ファイルを削除するコードは次のとおりです。

- (void)deleteDocumentWithName:(NSString*)name completion:(void (^)(BOOL success))completion
{
[self stopQuery];
NSURL* toDelete = [self URLForFileWithName:name];

UIDocument* doc = [[UIDocument alloc] initWithFileURL:toDelete];

void (^deleteDocument)() = ^() {
    // Wrap in file coordinator
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {

        NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
        [fileCoordinator coordinateWritingItemAtURL:toDelete
                                            options:NSFileCoordinatorWritingForDeleting
                                              error:nil
                                         byAccessor:^(NSURL* writingURL) {
                                             // Simple delete to start
                                             NSFileManager* fileManager = [[NSFileManager alloc] init];
                                             NSError* error = nil;
                                             [fileManager removeItemAtURL:writingURL error:&error];

                                             if (error) {
                                                 LogError(@"%s - error while deleting file: %@", __PRETTY_FUNCTION__, error);
                                             }

                                             dispatch_async(dispatch_get_main_queue(), ^{
                                                 [_files removeObject:toDelete];

                                                 if (completion) {
                                                     completion((error == nil));
                                                 }

                                                 [self startQuery];
                                             });
                                         }];
    });
};

if (doc) {
    if (doc.documentState == UIDocumentStateNormal) {
        [doc closeWithCompletionHandler:^(BOOL success) {
            if (success) {
                deleteDocument();
            } else {
                if (completion) {
                    completion(NO);
                }
            }
        }];
    } else {
        deleteDocument();
    }
}
}

このメソッドが実行された後、いくつかの NSMetadataQueryDidFinishGatheringNotifications を取得します。まず、削除されたファイルは含まれていません。次に、別の NSMetadataQueryDidFinishGatheringNotification がキャッチされ、削除されたファイルが再び含まれます。

この理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1