无法写入 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
我正在尝试编写一个 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