Приложение Apple File выполняет действие «Переместить» через расширение поставщика файлов, мое расширение отключается

введите здесь описание изображения

введите здесь описание изображения

В моем расширении поставщика файлов я хочу выполнить операцию перемещения в своем расширении 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 изображение файла введите здесь описание изображения


person jignesh Vadadoriya    schedule 07.02.2018    source источник
comment
Я бы порекомендовал переопределить метод importDocument, но не смог его проверить.   -  person nfls    schedule 07.02.2018
comment
я пробовал, но этот метод не был вызван   -  person jignesh Vadadoriya    schedule 07.02.2018
comment
@jigneshVadadoriya, можешь поделиться списком?   -  person MAhipal Singh    schedule 07.02.2018
comment
@MAhipalSingh, вам нужен файл plist с расширением поставщика файлов?   -  person jignesh Vadadoriya    schedule 07.02.2018
comment
Вопрос @MAhipalSingh обновлен   -  person jignesh Vadadoriya    schedule 07.02.2018
comment
Не могли бы вы попробовать эти ключи UIFileSharingEnabled = true и LSSupportsOpeningDocumentsInPlace = true. NSExtensionFileProviderSupportsEnumeration = true   -  person MAhipal Singh    schedule 07.02.2018
comment
@MAhipalSingh Спасибо, я пытался, но это не работает   -  person jignesh Vadadoriya    schedule 07.02.2018


Ответы (1)


вернуть экземпляр NSFileProviderItem в методе itemForIdentifier для идентификатора NSFileProviderRootContainerItemIdentifier. Если вы вернете nil для корневого идентификатора, приложение не будет включено в операции перемещения.

person Raghavendra G    schedule 07.02.2018
comment
я обновил свой вопрос, не могли бы вы передать его - person jignesh Vadadoriya; 07.02.2018
comment
Я выхожу, чтобы узнать, где вы это прочитали? есть ли документация или блог? - person jignesh Vadadoriya; 08.02.2018
comment
Была такая же проблема. Не удалось найти много информации о подробной реализации FileProvider. Пробовал много способов включить моего провайдера с MOVE, преуспел в этом. Отслеживается, предполагая, что вы предоставили действительный корень, чтобы его обнаружил браузер файлов. - person Raghavendra G; 08.02.2018
comment
не могли бы вы проверить этот вопрос файловое приложение удалить копию дублировать операцию"> stackoverflow.com/questions/48783317/ - person jignesh Vadadoriya; 14.02.2018