当我通过iTunes删除我的应用程序文件时,空间仍然被占用,直到我删除并重新安装该应用程序。如果我列出了我的应用程序文档目录的内容,则表示没有文件,所以我想知道是否有相当于垃圾文件夹的文件。如果没有,我应该怎么做才能恢复这个空间?
此应用程序正在利用UIImagePickerController录制视频,然后将其保存在应用程序的本地存储空间中。正是这些录音暴露给iTune("应用程序支持iTunes文件共享"在plist中),因此我可以在开发期间添加和删除文件。
我用来将文件保存到应用程序存储空间的代码:
extension VideoRecorderViewController: UIImagePickerControllerDelegate {
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let mediaType = info[UIImagePickerControllerMediaType]
if mediaType!.isEqualToString(kUTTypeMovie as String) {
let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
if let mediaURL = info[UIImagePickerControllerMediaURL] as? NSURL {
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone(name: "UTC")
dateFormatter.dateFormat = "yyyyMMddHHmmss"
let baseFilename = dateFormatter.stringFromDate(NSDate())
// Write out to application's storage area
let videoData = NSData(contentsOfURL: mediaURL)
let dataPath = documentsUrl.filePathURL?.path?.stringByAppendingPathComponent("\(baseFilename).MOV")
videoData?.writeToFile(dataPath!, atomically: true)
}
}
}
}
我用来列出应用程序存储空间中的文件的代码:
let directoryUrls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
print ("all files:")
for entry in directoryUrls {
let directoryItem : NSURL = entry
print(" ", directoryItem.absoluteString)
}
还尝试从TemporaryDirectory中删除:
func clearTmpDirectory() {
do {
let tmpDirectoryFiles = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(NSTemporaryDirectory())
print ("all files:")
for entry in tmpDirectoryFiles {
print("Removing: ", entry)
do {
try NSFileManager.defaultManager().removeItemAtPath(entry)
} catch let error as NSError {
print("error", error)
}
}
} catch let error as NSError {
print("error", error)
}
}
我一直在寻找答案,但我还没找到任何答案。任何人都可以提出我可能忽略的内容吗?
BTW我确实检查了CachesDirectory和MoviesDirectory。前者存在,但没有文件占用空间而后者不存在。刚刚检查了UserDirectory,但返回了一个nil列表。
答案 0 :(得分:0)
虽然我仍然不确定为什么清除TemporaryDirectory没有释放我希望的空间(洞察力仍然会被欣赏),更改用于存储持久视频捕获的代码的代码有助于。我将writeToFile方法更改为文件移动,例如:
do {
try NSFileManager.defaultManager().moveItemAtPath(mediaURL.path!, toPath: dataPath!)
} catch let error as NSError {
print("Error: ", error)
}