我正在尝试将 json
文件从应用程序包复制到 Document
目录,但令人惊讶的是我无法做到这一点。代码如下:
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [array lastObject];
NSString *path = [docDir stringByAppendingPathExtension"themes.json"];
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
NSString *themesPath = [[NSBundle mainBundle] pathForResource"themes" ofType"json"];
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:themesPath toPath:path error:&error];
if (error)
NSLog(@"Error %@", error);
}
它会产生以下错误:
Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x194a0e90 {NSSourceFilePathErrorKey=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Frinder.app/themes.json, NSUserStringVariant=( Copy ), NSFilePath=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Frinder.app/themes.json, NSDestinationFilePath=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Documents.themes.json, NSUnderlyingError=0x194a0400 "The operation couldn’t be completed. Operation not permitted"}
经过搜索,我找到了 this question并尝试修改我的代码如下:
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
NSString *themesPath = [[NSBundle mainBundle] pathForResource"themes" ofType"json"];
NSData *data = [NSData dataWithContentsOfFile:themesPath];
BOOL success = [[NSFileManager defaultManager] createFileAtPath:path contents:data attributes:nil];
if (!success)
NSLog(@"Fail");
}
但它也不起作用。 success
变量为 NO
。我尝试的最后一件事是:
[data writeToFile:path atomically:YES];
但还是徒劳。它返回 NO
。
我需要注意,问题仅出现在设备上。在模拟器上它工作得很好。 谁能给我一个线索?
第一个例子有一点是正确的:
[docDir stringByAppendingPathExtension"themes.json"];
应该是:
[docDir stringByAppendingPathComponent"themes.json"];
这很清楚我们您阅读了错误消息,您会看到它尝试将文件写入 /var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Documents.themes.json
。注意有一个 .
应该有一个 /
.
stringByAppendingPathExtension:
用于为文件添加扩展名,jpg
、txt
、html
、 .....
stringByAppendingPathComponent
将文件添加到路径中,通过添加正确的目录分隔符,您的大小写为 /
。
您的第二个示例肯定会失败,因为应用程序包是只读的。
关于ios - 无法写入文档目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194890/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) | Powered by Discuz! X3.4 |