【发布时间】:2013-04-18 18:30:47
【问题描述】:
我可以使用自定义名称下载二进制文件并将其保存到“文档”文件夹中。
如果我只是将 URL 更改为“应用程序支持”文件夹而不是“文档”文件夹,则无法写入该 URL,说它不存在。
以下是 URL 构建代码:
- ( NSURL * ) getSaveFolder
{
NSURL * appSupportDir = nil;
NSURL * appDirectory = nil;
NSArray * possibleURLs = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSAllDomainsMask];
if ( [possibleURLs count] >= 1 )
{
appSupportDir = [possibleURLs objectAtIndex:0];
}
if ( appSupportDir != nil)
{
NSString * appBundleID = [[NSBundle mainBundle] bundleIdentifier];
appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID];
}
return appSupportDir;
}
这是保存代码:
- ( void ) writeOutDataToFile:( NSData * )data
{
NSURL * finalURL = [self.rootPathURL URLByAppendingPathComponent:self.aFileName];
[data writeToURL:finalURL atomically:YES];
}
如果我将 NSArray 更改为:
NSArray * possibleURLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
然后它保存得很好。
我已阅读 Apple Docs on File 内容,但无法解决这个问题 - 我错过了什么?
【问题讨论】:
-
该代码对 iOS 毫无意义。不过,这对 OS X 来说很好。在 iOS 中,
Application Support目录已经在您应用的沙箱中。在 OS X 中,它不是。 -
@rmaddy 我真的很尊重您作为 iOS 权威,所以我想与您再次确认这一点。它在 iOS 文档中多次明确表示将捆绑 ID 附加到路径的末尾。如果他们不是故意的/没有必要,为什么还要一直这么说?
-
developer.apple.com/library/ios/documentation/FileManagement/… : "使用应用程序支持目录常量 NSApplicationSupportDirectory,将您的
附加到:您的应用程序为用户创建和管理的资源和数据文件。您可以使用此目录来存储应用程序状态信息、计算或下载的数据,甚至是您代表用户管理的用户创建的数据。” -
@SAHM 您的应用使用的其他库也可能写入您应用的应用程序支持文件夹。因此,如果您自己的代码附加了您的包 ID,它可以防止可能的命名冲突。
-
@rmaddy 所以这样做可能是个好主意,即使它可能完全没有必要,对吧?