Ios dismissGrantingAccessToURL:未能通过“退出”;didPickDocumentURLs使用nil或0 URL调用";

Ios dismissGrantingAccessToURL:未能通过“退出”;didPickDocumentURLs使用nil或0 URL调用";,ios,objective-c,ios11,Ios,Objective C,Ios11,我有一个iOS应用程序,它提供的文档选取器功能在iOS 10上运行得非常好,但在iOS 11上,它总是调用documentPickerWasCancelled:,并在日志中显示以下消息: [UIDocumentLog]UIDocumentPickerViewController:didPickDocumentURLs 使用nil或0 URL调用 我使用提供程序扩展上的有效NSURL正确地调用了dismissGrantingAccessToURL:,但它从未调用另一端的documentPicker

我有一个iOS应用程序,它提供的文档选取器功能在iOS 10上运行得非常好,但在iOS 11上,它总是调用
documentPickerWasCancelled:
,并在日志中显示以下消息:

[UIDocumentLog]UIDocumentPickerViewController:didPickDocumentURLs 使用nil或0 URL调用

我使用提供程序扩展上的有效NSURL正确地调用了
dismissGrantingAccessToURL:
,但它从未调用另一端的
documentPicker:didPickDocumentsThatls:


我想我遗漏了什么,你能给我解释一下这种不良行为吗?

我也有同样的问题。不幸的是,我认为这是IOS11中的错误或向后不兼容。根据文档,使用文档选择器扩展就足够了:

文档选择器视图控制器扩展可以单独执行导入和导出操作。如果要支持打开和移动操作,必须将其与文件提供程序扩展配对

事实上,这在iOS 10及更早版本中运行良好。IOS11可能是为了向后兼容现有的无文件提供者文档选择器,但似乎不是这样。或者他们忘了更新文档

相反,您可以实现新的更新文件提供程序,通过标准文档浏览器UI访问您的文件:


我也有同样的问题。不幸的是,我认为这是IOS11中的错误或向后不兼容。根据文档,使用文档选择器扩展就足够了:

文档选择器视图控制器扩展可以单独执行导入和导出操作。如果要支持打开和移动操作,必须将其与文件提供程序扩展配对

事实上,这在iOS 10及更早版本中运行良好。IOS11可能是为了向后兼容现有的无文件提供者文档选择器,但似乎不是这样。或者他们忘了更新文档

相反,您可以实现新的更新文件提供程序,通过标准文档浏览器UI访问您的文件:


这确实适用于支持iOS10选择器的IOS11文件提供程序。您可能希望使用新的Xcode模板创建新的文件提供程序,然后使用:

@available(iOSApplicationExtension 11.0, *)
在FileProviderItem和FileProviderEnumerator类上,然后:

if #available(iOSApplicationExtension 11.0, *) {
在文件ProviderExtension上的方法中

我发现我的ios10选择器确实正确地调用了这个方法,但请注意,要使它工作,需要completionHandler?(nil)。默认情况下,iOS11模板插入报告失败的完成。此代码适用于我:

    override func startProvidingItem(at url: URL, completionHandler: ((_ error: Error?) -> Void)?) {

            completionHandler?(nil)

    //        completionHandler?(NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:]))

}
然而,这并不是iOS10/11不兼容的结束。如果您使用与iOS10/11兼容的文件提供程序,就我所见,它不会在某些iOS10设备上运行。我可以在32位iOS设备上运行或调试我的,但FileProvider在64位iOS 10设备上崩溃,并出现以下错误:

dyld: Library not loaded: /System/Library/Frameworks/FileProvider.framework/FileProvider
  Referenced from: /private/var/containers/Bundle/Application/61BBD1A7-EA1E-4C10-A208-CA1DFA433C8D/test.app/PlugIns/testFileProvider.appex/testFileProvider
  Reason: image not found

这确实适用于支持iOS10选择器的IOS11文件提供程序。您可能希望使用新的Xcode模板创建新的文件提供程序,然后使用:

@available(iOSApplicationExtension 11.0, *)
在FileProviderItem和FileProviderEnumerator类上,然后:

if #available(iOSApplicationExtension 11.0, *) {
在文件ProviderExtension上的方法中

我发现我的ios10选择器确实正确地调用了这个方法,但请注意,要使它工作,需要completionHandler?(nil)。默认情况下,iOS11模板插入报告失败的完成。此代码适用于我:

    override func startProvidingItem(at url: URL, completionHandler: ((_ error: Error?) -> Void)?) {

            completionHandler?(nil)

    //        completionHandler?(NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:]))

}
然而,这并不是iOS10/11不兼容的结束。如果您使用与iOS10/11兼容的文件提供程序,就我所见,它不会在某些iOS10设备上运行。我可以在32位iOS设备上运行或调试我的,但FileProvider在64位iOS 10设备上崩溃,并出现以下错误:

dyld: Library not loaded: /System/Library/Frameworks/FileProvider.framework/FileProvider
  Referenced from: /private/var/containers/Bundle/Application/61BBD1A7-EA1E-4C10-A208-CA1DFA433C8D/test.app/PlugIns/testFileProvider.appex/testFileProvider
  Reason: image not found

谢谢,我看到那个有同样问题的Dropbox,用一个新的文件提供商更新了他们的应用程序,我将遵循他们相同的选择。谢谢,我看到那个有同样问题的Dropbox,用一个新的文件提供商更新了他们的应用程序,我将遵循他们相同的选择。