使用LXLogger,我能够将日志条目写入设备和模拟器上的文件(除了xcode控制台等)。
LXLogger存储文件的默认位置在ApplicationSupportDirectory下。

LXLogger将文件写入OK,可以看到该文件在我的设备上(或使用模拟器时在我的Mac HDD上),但是当我尝试打开该文件时,我被告知该文件不存在。

我添加了根据代码生成的错误日志。

我在这里尝试了十几种不同的方法并提出了多个问题,都无济于事。

let directory = NSFileManager.defaultManager().URLsForDirectory(.ApplicationSupportDirectory, inDomains: .UserDomainMask).first!.URLByAppendingPathComponent(NSBundle.mainBundle().bundleIdentifier!, isDirectory: true).URLByAppendingPathComponent("logs", isDirectory: true)

    do {
        let array = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(directory, includingPropertiesForKeys: nil, options:[])
        var str = array[0].description
        str = str.stringByReplacingOccurrencesOfString("file://", withString: "", options: .LiteralSearch, range: nil)
        let fileURL = NSURL(fileURLWithPath:str)
        log.info("fileURL contains: " + fileURL.absoluteString)
            do {
                log.info("Attempting to get contentsOfURL")
                let data = try NSString(contentsOfFile: array[0].description,
                                        encoding: NSASCIIStringEncoding)
                logTextView.text = data as String
            } catch let error as NSError {
                log.error(error.description)
            }
        }
        catch let error as NSError {
            log.error(error.description)
        }


上面代码的日志输出:

> 2016-03-31 21:43:52.121 [INFO] fileURL contains: file:///private/var/mobile/Containers/Data/Application/2F812C06-E204-4543-905C-F884C35DA198/Library/Application%2520Support/myname.myapp/logs/1_log.txt
> 2016-03-31 21:43:52.122 [INFO] Attempting to get contentsOfURL
> 2016-03-31 21:43:52.123 [ERROR] Error Domain=NSCocoaErrorDomain Code=260 "The file “1_log.txt” couldn’t be opened because there is no such file." UserInfo={NSFilePath=file:///private/var/mobile/Containers/Data/Application/2F812C06-E204-4543-905C-F884C35DA198/Library/Application%20Support/myname.myapp/logs/1_log.txt, NSUnderlyingError=0x1376e0e00 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}


所以代码显示文件在那里(我可以在Mac上物理打开副本),但是应用程序找不到它。
大概与我使用文件handle / nsurl /之类的东西有关吗?

最佳答案

您从array获取NSURL并使用stringByReplacingOccurrencesOfStringfileURLWithPath然后使用description的方法是错误的;它无法正确处理网址中的百分比编码,并且通常比较复杂/脆弱。

这可以简单得多,因为您已经在contentsOfDirectoryAtURL数组中返回了文件URL。您可以直接使用它:

let data = try String(contentsOfURL: array[0], encoding: NSUTF8StringEncoding)

10-07 19:49