1

我在“文件”应用程序中遇到工作集枚举器(“最近”选项卡)问题。我为文件夹实现了一个工作枚举器,它运行 enumerateItems(当我移动到 UI 中的文件夹时,它运行观察者方法并且一切正常。我也有一个不同的工作集枚举器,但它没有创建和枚举任何东西。

    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 调用它吗?

谢谢!

4

1 回答 1

0

工作集枚举器不像你想的那样工作。文件提供程序扩展将在后台枚举工作集,甚至在您打开文件应用程序之前。这就是为什么您需要离线准备工作集数据的原因。WWDC 2017 文档可能会有所帮助。

于 2019-01-07T09:46:48.003 回答