无法写入 iOS 文档提供程序中的路径

Cannot write to path within iOS document provider

我正在尝试编写一个 iOS 文档提供程序 (iOS 9),并使用可用的 Apple 文档和代码作为陈述点。但是,我 运行 遇到了一个奇怪的问题,我无法写入存储 URL 指向的位置。我正在测试导入操作。

这是我为 documentStorage 获得的值URL:

file:///private/var/mobile/Containers/Shared/AppGroup/4F0A350D-8CD7-4A25-83ED-2C6120CD30FA/File%20Provider%20Storage/

然而,当我尝试写入该位置时,出现以下错误:

Error Domain=NSCocoaErrorDomain Code=4 "The file “test.txt” doesn’t exist." UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/4F0A350D-8CD7-4A25-83ED-2C6120CD30FA/File Provider Storage/test.txt, NSUnderlyingError=0x15f5ba010 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

奇怪的是从容器URL返回的容器URLForSecurityApplicationGroupIdentifier实际上是不同的:

file:///private/var/mobile/Containers/Shared/AppGroup/A92110D1-D0B9-4DA7-8048-A4C63FF931D5/

我实际上能够写入后一条路径并将其读回以进行验证,但是当我调用 dismissGrantingAccessToURL 时,我收到一条错误消息,提示我返回的路径不是 documentStorageURL.

这是我在文档提供程序的 UI 中按下按钮后调用的相关代码:

NSURL *container = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.jdw.DocumentProvider"]; 
NSLog(@"container url = %@", container);
NSLog(@"openDocument: storage uRL = %@", self.documentStorageURL);
NSURL* documentURL;

if (self.documentStorageURL != nil)
    documentURL = [self.documentStorageURL URLByAppendingPathComponent:@"test.txt"];
else
    documentURL= [container URLByAppendingPathComponent:@"test.txt"];

NSString *fileName = [documentURL path];

NSString *contents = @"this is a dynamically created text file";

NSLog(@"write to file = %@", fileName);

NSError *err;

[contents writeToFile:fileName 
          atomically:NO 
            encoding:NSStringEncodingConversionAllowLossy 
                error:&err];

NSLog(@"write: error = %@", err);

我今天又试了一次,一切都神奇地起作用了,没有任何本应解决问题的重大代码更改。不过我确实重置了 iPhone。

我很确定这是一个 iOS 或 XCode 错误。作为参考,我使用 XCode 7.2 和 iOS 9.2