iOS临时文件夹位置

时间:2012-08-10 08:16:42

标签: ios objective-c temporary-directory

我的应用程序刚被Apple拒绝,因为它将临时文件或缓存文件存储在文档目录中。对。他们的拒绝消息说明:

  

您的应用使用的临时文件只应存储在/tmp目录

我认为除了应用程序文件夹中的文档之外。

我现在正在尝试在iPhone模拟器中调试此问题,当我使用NSTemporaryDirectory()时,我在Xcode调试器中获得的值为/var/folders/yj/gnz1c7156c7d6d4fj429yms40000gn/T/tempzip.zip,而不是/Users/me/Library/Application Support/iPhone Simulator/5.1/Applications/8F71AB72-598C-427A-A116-36833D3209F7/tmp/tempzip.zip。< / p>

所以:NSTemporaryDirectory()使用iPhone模拟器有不同的行为,是否可以在调试时跟踪应用程序的临时目录?

4 个答案:

答案 0 :(得分:21)

iOS 9或更高版本•Swift 3或更高版本

let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory())

iOS 10.0 + Beta,macOS 10.12 +,tvOS 10.0 + Beta&amp; watchOS 3.0+•Xcode 8•Swift 3或更高版本

let tmpDirURL = FileManager.default.temporaryDirectory

答案 1 :(得分:17)

2016年更新回答:

  • 用户明确接受并且可能在他/她的iCloud空间中备份的数据应写在用户的&#34; Documents&#34;目录

  • 属于并扩展您的应用程序的数据(扩展用户可以下载,例如,...),但不在捆绑中的数据应该写在&#34;应用程序的子文件夹中支撑/&#34;目录,拥有appID的标题。它也可以是&#34; Cache&#34;目录

  • 具有短生命时间的数据可以存储在应用程序的tmp目录中。在这种情况下,使用NSTemporaryDirectory()可以获得&#34; tmp&#34;目录即可。 检查this link以获取更多帮助。

在#34; 确定应用程序特定文件的存储位置&#34;部分中查看此official iOS developement Apple page解释。

以下是Swift中的3个函数,旨在将NSURL返回到这些目录并使您更简单。

<强>夫特

$view = views_get_view('<view machine name>');

答案 2 :(得分:12)

我在真实设备上对此进行了测试,然后又返回:“/private / var / mobile / Applications / C82383-EBD6-4F72-BC16-A865478D27 / tmp / tempzip.zip”

总的来说,使用NSTemporaryDirectory()是查找临时目录路径的正确方法,如果要调试并查看其中的内容,您需要在Finder中手动查找它,如果你正在使用iPhone模拟器。

  

检查下面的新答案(不推荐使用此答案)

答案 3 :(得分:7)

根据the docs,您应该避免NSTemporaryDirectory()支持此方法

- (NSURL)URLForTemporaryFolder
{
    // Get a parent folder, trying user folder (fails iOS) and falling back to AppSupport and Docs
    NSURL *parentFolderURL = [NSURL URLForDirectory:NSUserDirectory domainMask:NSUserDomainMask];
    if (!parentFolderURL) parentFolderURL = [NSURL URLForDirectory:NSApplicationSupportDirectory domainMask:NSUserDomainMask];
    if (!parentFolderURL) parentFolderURL = [NSURL URLForDirectory:NSDocumentDirectory domainMask:NSUserDomainMask];

    // Get the temp folder URL using approach outlined in the docs
    NSURL *tmpURL = [[NSFileManager defaultManager]
     URLForDirectory:NSItemReplacementDirectory
     inDomain:NSUserDomainMask
     appropriateForURL:parentFolderURL
     create:YES
     error:NULL];

    return tmpURL;
}

请注意,每次调用它时都会创建一个 new 唯一的临时文件夹,由您来清理它。