2015-08-05 15 views
6

Ich lerne Swift und war frustriert herauszufinden, wie ich Dateien nicht laden kann. Es stellt sich heraus, dass der Code in Xcode funktioniert, aber nicht auf einem Spielplatz funktioniert. Was ist der Grund dafür?Swift 2.0 Code funktioniert in Xcode, aber nicht in Playground

Hier ist der Code:

func testFileLoad(){ 
    let myFilePath: String = "/Users/clay/Desktop/test.txt" 
    let t: Bool = NSFileManager.defaultManager().fileExistsAtPath(myFilePath) 
    print(t) 

    let s: String = try! String(contentsOfFile: myFilePath, encoding: NSUTF8StringEncoding) 
    print(s) 

    do { 
     let p: String = try String(contentsOfFile: myFilePath, encoding: NSUTF8StringEncoding) 
     print(p) 
    } catch { 
     print("nope") 
    } 
} 

Laufen in einem Testmodul in Xcode, es funktioniert und druckt, was ich für an die Konsole hoffen würde.

Test Suite 'Selected tests' started at 2015-08-05 14:24:15.977 
Test Suite 'swiftgraphTests' started at 2015-08-05 14:24:15.978 
Test Case '-[swiftgraphTests.swiftgraphTests testFileLoad]' started. 
true 
this is a test 
this is a test 
Test Case '-[swiftgraphTests.swiftgraphTests testFileLoad]' passed (0.001 seconds). 
Test Suite 'swiftgraphTests' passed at 2015-08-05 14:24:15.979.  
    Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds 
Test Suite 'Selected tests' passed at 2015-08-05 14:24:15.979. 
    Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.002) seconds 

In einem Spielplatz, bekomme ich diese:

enter image description here

Was mache ich falsch hier? Benütze ich den Spielplatz falsch?

Antwort

7

Wenn Sie in das Menü gehen

"View" -> "Debug Area" -> "Show Debug Area"

erhalten Sie die vollständige Fehlermeldung angezeigt: „Sie haben keine Berechtigungen * das Dateisystem vom Spielplatz zu gelangen.“

Die Problemumgehung ist enthalten die Datei in den Spielplatz mit seinem Project Navigator.

Ins Menü

"View" -> "Navigators" -> "Show Project Navigator"

ziehen und die Dateien in die „Ressourcen“ Ordner.

Verwenden Sie dann NSBundle, um den Pfad abzurufen.

func testFileLoad() { 

    // get the file path for the file from the Playground's Resources folder 
    guard let path = NSBundle.mainBundle().pathForResource("test", ofType: "txt") else { 
      print("Oops, the file is not in the Playground") 
      return 
    } 

    // keeping the examples from your question 
    let s: String = try! String(contentsOfFile: path, encoding: NSUTF8StringEncoding) 
    print(s) 

    do { 
     let p: String = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding) 
     print(p) 
    } catch { 
     print("nope") 
    } 

} 

testFileLoad() 

* Eigentlich haben Sie nur Zugriff auf den Ordner /var/ Ihre Spielplatz gemeinsam genutzter Daten enthält, und der Spielplatz bietet nur eine Verknüpfung. Dieser Ordner im Navigator des Playgrounds repräsentiert den Ordner /var/ und ist für jeden Playground einzigartig. Sie können ihre Adresse mit NSBundle sehen:

NSBundle.mainBundle().resourcePath 
+0

Ist 'var' Ordner in die geholt werden Bündel der Spielplatzdatei? – Clay

+1

Ich habe meine Antwort mit zusätzlichen Details zu diesem Ordner aktualisiert. – Moritz

2

Könnte ein Berechtigungsproblem sein. Wahrscheinlich haben Sie in Ihrem XCode-Projekt eine Reihe von Privilegien, die auf dem Spielplatz nicht verfügbar sind.

+2

Das einzige Verzeichnis, das Sie den Zugriff auf in einem Spielplatz mit 'NSSearchPathForDirectoriesInDomain (.DocumentDirectory, .UserDomainMask, true)' –

Verwandte Themen