【发布时间】:2015-07-22 22:15:48
【问题描述】:
当我在 iPad 上测试我的应用程序时,它运行完美,即调用数据库、创建文件夹并执行其他任务,但在控制台中它显示给我
2015-05-12 11:25:32.478 MyApp[291:19680] [PLLogging] 无法创建日志目录:操作无法完成。 (可可错误 513。)。
当我搜索时,找到了这个答案NSFileManager creating folder (Cocoa error 513.)
但不能删除它。
此外,当我关闭并重新启动 iPad 时,此行不显示
问题:
- 为什么我在控制台中得到这个语句?
- 上述语句将来会导致我的应用程序崩溃吗?
- 如何删除 Cocoa 错误 513 ?
这是我调用数据库的代码
let fileManager = NSFileManager()
var Sourcepath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("DataBase.db");
let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
let databaseStr = "DataBase.db"
let dbPath = docsPath.stringByAppendingPathComponent(databaseStr)
println(dbPath)
if(fileManager .fileExistsAtPath(dbPath) == false) {
var error:NSError?
fileManager.copyItemAtPath(Sourcepath!, toPath: dbPath, error: &error)
println(error)
}
这是一个创建日志文件夹的函数
func CreateLog(Log:String)
{
autoreleasepool{
var formatter:NSDateFormatter! = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd";
var DateString = formatter.stringFromDate(NSDate()).stringByAppendingString("_tempLogs")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss";
var FileManager:NSFileManager! = NSFileManager.defaultManager()
var LogFolder = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("Logs")
let searchPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
let LogStr = "Logs"
let LogFolderPath = searchPath.stringByAppendingPathComponent(LogStr)
if(FileManager.fileExistsAtPath(LogFolderPath) == false)
{
var error:NSError?
FileManager.createDirectoryAtPath(LogFolderPath, withIntermediateDirectories: true, attributes: nil, error: &error)
}
var LogPath = LogFolderPath.stringByAppendingPathComponent(DateString).stringByAppendingPathExtension("txt")
var WriteString = (formatter.stringFromDate(NSDate()).stringByAppendingString(" ").stringByAppendingString(Log).stringByAppendingString("\n"));
var Data = WriteString.dataUsingEncoding(NSUTF8StringEncoding)
if(!FileManager.fileExistsAtPath(LogPath!))
{
FileManager.createFileAtPath(LogPath!, contents: Data, attributes: nil)
}
else
{
var output = NSFileHandle(forWritingAtPath: LogPath!);
output?.seekToEndOfFile();
output?.writeData(Data!);
output?.closeFile()
output = nil
}
formatter = nil
FileManager = nil
}
}
【问题讨论】:
-
当我使用 ALAssetsLibrary 的方法“writeImageToSavedPhotosAlbum”时,我在 Objc 中有相同的错误消息。而且我没有在我的应用程序中使用任何日志目录....
-
嗨 patrick,你找到解决方案了吗?
-
总是打印出
error,不要只是忽略那里的变量。它通常包含相关信息。 -
尝试把你的日志放到缓存目录(
NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String),这是日志唯一正确的地方。这会解决您的问题吗?切勿将任何数据写入 Documents 目录,它仅用于用户生成的内容。这也可能是应用商店拒绝您的应用的原因,因为文档内容是通过 iCloud 同步的。
标签: ios xcode swift ipad cocoa-touch