我的应用程序刚被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模拟器有不同的行为,是否可以在调试时跟踪应用程序的临时目录?
答案 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 唯一的临时文件夹,由您来清理它。