【问题标题】:Apple File Application perform "Move" action via file provider extension my extention display disableApple File Application 通过文件提供程序扩展执行“移动”操作我的扩展显示禁用
【发布时间】:2018-02-07 09:21:17
【问题描述】:

在我的文件提供程序扩展中,我想在我的 NoteProvider 扩展中执行移动操作。

我可以通过拖动操作在任何文件夹上方移动任何文件,它可以正常工作但是当我尝试通过操作显示在波纹管屏幕中“移动”时,screen2 显示和其他扩展已启用,但我的 NotProvider 扩展被禁用。

我的代码是FileProviderItem

class FileProviderItem: NSObject, NSFileProviderItem {

    public var id: String?
    public var name: String?
    var childItemCount : NSNumber?
    var documentSize: NSNumber?
    var creationDate : Date?
    var contentModificationDate : Date?
    var lastUsedDate: Date?
    var isDownloaded: Bool = false

    public var fTypeIdentifier: String?

    var pid : NSFileProviderItemIdentifier!

    var parentItemIdentifier: NSFileProviderItemIdentifier {
        return pid
    }

    var typeIdentifier: String {
        return fTypeIdentifier! // for folder =  "public.folder", for file  = file type UTI
    }

    var itemIdentifier: NSFileProviderItemIdentifier {
        return NSFileProviderItemIdentifier(self.id!)
    }

    var filename: String {
        return self.name!
    }

    override init() {

    }

    override func isEqual(_ object: Any?) -> Bool {
        if let obj = object as? FileProviderItem {
            if self.itemIdentifier == obj.itemIdentifier {
                return true
            }
        }
        return false
    }

    var capabilities: NSFileProviderItemCapabilities {
        return .allowsAll
    }
}

对于FileProviderExtension

class FileProviderExtension: NSFileProviderExtension {

 override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
    // resolve the given identifier to a record in the model
    // db = Array of NSFileProviderItem
    for i in db {
        if i.itemIdentifier.rawValue == identifier.rawValue {
            return i
        }
    }

    // TODO: implement the actual lookup
    throw NSError(domain: NSCocoaErrorDomain, code: NSNotFound, userInfo:[:])
}

override func importDocument(at fileURL: URL, toParentItemIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {

    print("importDocument :- \(fileURL) parentItemIdentifier = \(parentItemIdentifier)")
    completionHandler(nil, nil)
 }

 override func reparentItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toParentItemWithIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, newName: String?, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {

        print("reparentItem :- \(itemIdentifier) parentItemIdentifier = \(parentItemIdentifier) newName = \(String(describing: newName))")

        guard let item = try? item(for: itemIdentifier) as? FileProviderItem else {
            completionHandler(nil, NSFileProviderError(.noSuchItem))
            return
        }

        item?.pid = NSFileProviderItemIdentifier(rawValue: parentItemIdentifier.rawValue)
        //item?.name = newName
        completionHandler(item, nil)

    }

}

NoteProvider(FileProvider) .plist 文件图片

【问题讨论】:

  • 我建议重写方法 importDocument,但我无法测试它。
  • 我试过了,但没有调用这个方法
  • @jigneshVadadoriya 你能分享一下 plist 吗?
  • @MAhipalSingh 你想要文件提供者扩展 plist 文件吗?
  • @MAhipalSingh 问题已更新

标签: ios swift3 swift4 fileprovider-extension


【解决方案1】:

在标识符 NSFileProviderRootContainerItemIdentifieritemForIdentifier 方法中返回 NSFileProviderItem 实例。如果根标识符返回 nil,则移动操作中不会启用应用程序。

【讨论】:

  • 我已经更新了我的问题,请您参考一下
  • 我很想知道你在哪里读过这篇文章?有没有文档或博客?
  • 遇到了同样的问题。找不到有关详细 FileProvider 实现的太多信息。尝试了多种方法来启用我的 Provider 与 MOVE,成功了。尾随假设提供有效的根以被文件浏览器检测到。
  • 你能检查一下这个问题吗stackoverflow.com/questions/48783317/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多