FileProviderExtension workingSet перечислитель не вызывал - PullRequest
0 голосов
/ 09 сентября 2018

У меня проблема с рабочим перечислителем набора (вкладка "Последние") в приложении "Файлы". Я реализую рабочий перечислитель для папок, он запускает enumerateItems (для метода наблюдателя, когда я перехожу к папке в пользовательском интерфейсе, и все работает нормально. И у меня есть другой перечислитель для рабочего множества, но он ничего не создал и не перечислил.

    override func enumerator(for containerItemIdentifier: NSFileProviderItemIdentifier) throws -> NSFileProviderEnumerator {  
        let maybeEnumerator: NSFileProviderEnumerator?  
        if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {  
            let directory = repository.directory(for: containerItemIdentifier)!  
            maybeEnumerator = FileProviderFolderEnumerator()  
        } else if (containerItemIdentifier == NSFileProviderItemIdentifier.workingSet) {  
            maybeEnumerator = FileProviderWorkingSetEnumerator() // not called  
        } else {  
            _ = repository.item(for: containerItemIdentifier)  
            if repository.isDirectory(at: containerItemIdentifier) {  
                let directory = repository.directory(for: containerItemIdentifier)!  
                maybeEnumerator = FileProviderFolderEnumerator() // works fine  
            } else {  
                maybeEnumerator = FileProviderItemEnumerator()  
            }  
        }  
        guard let enumerator = maybeEnumerator else {  
            throw NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:])  
        }  
        return enumerator  
    }

Я пытаюсь вызвать перечислитель рабочего набора в методе startProvidingItem, используя сигнал, но он не работает.

override func startProvidingItem(at url: URL, completionHandler: @escaping ((_ error: Error?) -> Void)) {  
    loadItem {  
        //when done with loading  
        NSFileProviderManager.default.signalEnumerator(  
            for: NSFileProviderItemIdentifier.workingSet,  
            completionHandler: { error in  
                if let err = error { print(err) }  
        }  
    }  
} 

Автоматически ли инициализируется FileProviderWorkingSetEnumerator при открытии вкладки «Последние» в приложении «Файлы»? Должен ли я позвонить как-то прямо из FileExtension?

Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Перечислитель рабочего набора не работает так, как вы думаете. Расширение провайдера файлов будет перечислять рабочий набор в фоновом режиме, даже до того, как вы откроете приложение Файлы. Вот почему вам необходимо подготовить данные рабочего набора в автономном режиме. Документ WWDC 2017 может помочь.

...