1

我正在为导入模式开发文档提供程序扩展。

文件的 URL 位于扩展程序和容器应用程序共享的共享容器内。

我得到断言失败,说它应该位于共享容器/文件提供程序存储目录中。

所以我将文件从原始目录复制到 File Provider Storage 目录。

我在原始位置有一个文件,并且在新复制的位置也有一个文件。我还检查了文件的数据长度,它是正确的,

但是当我调用 [self dismissGrantingAccessToURL:toUrl];

它不解雇UIDocumentPickerExtensionViewController

我没有遇到任何异常,但它不会关闭并启动传输,因此用户仍然可以访问扩展程序。

以下是我的代码,如果有人遇到同样的事情,请留下您的回复。

- (void)userChoosesEntityOfUrl:(NSURL *)url
{
    NSURL *toUrl = [self.documentStorageURL URLByAppendingPathComponent:[url lastPathComponent]];

    if ([[NSFileManager defaultManager] fileExistsAtPath:[toUrl path]]) {
        [[NSFileManager defaultManager] removeItemAtPath:[toUrl path] error:nil];
    }
    if ([[NSFileManager defaultManager] copyItemAtURL:url toURL:toUrl error:nil]) {

        NSLog(@"%@", [toUrl path]);
    }
    if (![[NSFileManager defaultManager] fileExistsAtPath:[toUrl path]]) {
        NSLog(@"File Doesn't exists at this path");
        return;
    }
    NSLog(@"Data Length %i",[[NSData dataWithContentsOfFile:[toUrl path]] length]);

    [self dismissGrantingAccessToURL:toUrl];
}
4

2 回答 2

2

在调试您的实现时NSFileProviderExtension,您通常最终会使用 Xcode 停止/杀死它。在此之后,iOS 经常在重新启动文件扩展名时出现问题。这会导致您的文档选择器在调用dismissGrantingAccessToURL:. 此错误还会影响您的子类,UIDocumentPickerExtensionViewController它有时不会启动(您只能看到文档选择器的导航栏,但看不到内容)。

解决方法是重新启动您的设备。

于 2014-10-23T11:26:56.043 回答
0

如果您有一个尚未完全实现的支持文件提供程序扩展,则会发生这种情况。从嵌入式扩展阶段删除 File Provider 目标,在 Info.plist 中设置文档扩展仅支持导入/导出模式,并在构建和运行扩展之前执行产品 -> 清理。

于 2014-10-14T00:14:08.067 回答