2016-04-01 10 views
0

Mit LXLogger Ich bin in der Lage Einträge zu schreiben, melden Sie sich auf dem Gerät und Simulator (zusätzlich zu Xcode Konsole usw.) einzureichen. Der Standardspeicherort, in dem LXLogger die Datei speichert, befindet sich im ApplicationSupportDirectory.von ApplicationSupportDirectory in iOS Lesen

LXLogger schreibt in die Datei OK, und ich kann sehen, die Datei ist auf meinem Gerät (oder auf meinem Mac HDD bei Verwendung des Simulators), aber wenn ich versuche, die Datei zu öffnen, wird mir gesagt, dass die Datei nicht existiert .

Ich habe die Fehlerprotokolle erzeugt in Übereinstimmung mit dem Code hinzugefügt.

Ich habe versucht, ein Dutzend verschiedene Methoden und mehrere Fragen auf hier, ohne Erfolg.

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) 
     } 

Logausgaben von oben Code:

> 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"}} 

So zeigt der Code, dass die Datei ist (und ich auf meinem Mac physisch können die Kopie öffnen), aber die App es nicht finden können, . Vermutlich seine etwas mit meiner Verwendung des Datei-Handle/NSURL/so etwas zu tun ??

Antwort

2

Ihr Ansatz, die NSURL von array Aufnahme und Verwendung von stringByReplacingOccurrencesOfString und fileURLWithPath und dann description ist falsch; Es behandelt die prozentuale Codierung in der URL nicht korrekt und ist in der Regel komplex/fragil.

Dies kann viel einfacher sein, weil Sie bereits eine Datei-URL in dem Array von contentsOfDirectoryAtURL zurückgegeben haben. Sie können es einfach direkt verwenden:

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

So einfach und es hat sofort funktioniert. Danke :) –

+0

Ich bin froh, dass ich helfen konnte! – jtbandes

+0

@mad_dog Ist dies Ihre Frage beantwortet, markieren Sie es bitte, indem Sie das Häkchen auf der linken Seite neben den Wahl Pfeile akzeptiert. Vielen Dank! :) – jtbandes