首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS临时文件夹位置

iOS临时文件夹位置
EN

Stack Overflow用户
提问于 2012-08-10 08:16:42
回答 4查看 47.9K关注 0票数 36

我的应用程序刚刚被苹果拒绝,因为它在文档目录中存储临时文件或缓存文件。正确的。他们的拒绝信息说:

应用程序使用的临时文件只应存储在/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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-10 23:55:07

更新2016年答案:

  • 用户显式接受并可能备份到其iCloud空间中的数据应写入用户的“文档”目录中。
  • 属于并扩展应用程序的数据(例如,扩展用户可以下载.),但这些数据不在包中,应该写入"Application /“目录的一个子文件夹中,该目录具有appID的标题。它也可以是“缓存”目录
  • 使用时间短的数据可以存储在应用程序的tmp目录中。在本例中,可以使用NSTemporaryDirectory()获取"tmp“目录。检查http://nshipster.com/nstemporarydirectory/以获得其他帮助。

请在“确定在何处存储应用程序特定文件的官方iOS开发苹果网页”一节中查看此以获得解释。

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

Swift

代码语言:javascript
运行
复制
func GetDocumentsDirectory()->NSURL{
    //returns User's "Documents" directory
    //something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/Documents/
    //something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/Documents/
    let filemgr = NSFileManager.defaultManager()
    let docsDirURL = try! filemgr.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
    return docsDirURL
}

func GetApplicationSupportDirectory()->NSURL{
    //returns Application's support directory
    //something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/Library/Application%20Support/YOURAPPBUNDLEID/
    //something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/Library/Application%20Support/YOURAPPBUNDLEID/
    let AllDirectories : [NSURL]
    var ApplicationSupportDirectory : NSURL=NSURL.init()
    var ApplicationDirectory : NSURL=NSURL.init()
    AllDirectories=NSFileManager.defaultManager().URLsForDirectory(.ApplicationSupportDirectory, inDomains: .UserDomainMask)
    if AllDirectories.count>=1{
        ApplicationSupportDirectory=AllDirectories[0]
    }
    if !ApplicationSupportDirectory.isEqual(nil) {
        ApplicationDirectory=ApplicationSupportDirectory.URLByAppendingPathComponent(NSBundle.mainBundle().bundleIdentifier!)
    }
    return ApplicationDirectory
}

func GetTemporaryDirectory()->NSURL{
    //returns Application's temporary directory
    //something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/tmp/
    //something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/tmp/
    return NSURL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
}
票数 27
EN

Stack Overflow用户

发布于 2016-09-04 15:28:43

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

代码语言:javascript
运行
复制
let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory())

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

代码语言:javascript
运行
复制
let tmpDirURL = FileManager.default.temporaryDirectory
票数 45
EN

Stack Overflow用户

发布于 2012-08-10 08:16:42

我已经在一个真正的设备上测试过这个,它返回了:"/private/var/mobile/Applications/C82383-EBD6-4F72-BC16-A865478D27/tmp/tempzip.zip“

因此,总的来说,使用NSTemporaryDirectory()是查找临时目录路径的正确方法,如果您想调试和查看其中所做的操作,如果您使用的是iPhone模拟器,则需要在查找器中手动找到它。

检查下面较新的答案(这个不推荐)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11897825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档