2016-04-01 19 views
0

LXLoggerを使用するデバイスやシミュレータのファイルにログエントリを書き込むことができます(xcodeコンソールなどに加えて)。 LXLoggerがファイルを保存するデフォルトの場所は、ApplicationSupportDirectoryの下にあります。iOSのApplicationSupportDirectoryから読む

LXLoggerはファイルに書き込みます。ファイルは私のデバイス(または私の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上のコピーを開くことができます)ファイルがあることを示しているが、このアプリはそれを見つけることができません。 おそらく私のファイルハンドル/ nsurl /そのようなものの私の使い方と何か関係がありますか?

答えて

2

arrayからNSURLを取得し、stringByReplacingOccurrencesOfStringfileURLWithPath、次にdescriptionを使用するあなたのアプローチは間違っています。 URLのパーセントエンコーディングが正しく処理されず、一般的に複雑/脆弱です。

これは、すでにファイルURLがcontentsOfDirectoryAtURLから返されているため、はるかに簡単です。

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

とてもシンプルですぐに使えます。ありがとう:) –

+0

私は助けることができてうれしい! – jtbandes

+0

@mad_dogこれがあなたの質問に答えた場合は、投票矢印の左にあるチェックマークをクリックして、それを合格とマークしてください。ありがとう! :) – jtbandes