1. Wenn du alle Inhalte sehen, oder selber eine Frage erstellen möchtest, kannst du dir in wenigen Sekunden ein Konto erstellen. Die Registrierung ist kostenlos, als Mitglied siehst du keine Werbung!

Bin blutiger Anfänger: Path Control auslesen

Diskutiere das Thema Bin blutiger Anfänger: Path Control auslesen im Forum App Entwickler für iOS.

  1. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Moin!
    (Gibt es keinen Bereich für Appentwicklung für den Mac?!? Aber das ist ja eh gleich …)

    Ich habe gestern angefangen in Xcode zu experimentieren und komme nicht weiter. Ich habe ein Objekt „Path Control“ und kann es nicht auslesen. Ich habe nämlich ein Path Control und einen Button. Nachdem ich ein Pfad eingestellt habe, will ich bei einem Klick auf den Button den Pfad an eine Variable übergeben. Anschließend will ich den Pfad so umbauen, dass ich ihn an ein Terminal-Befehl anhängen kann. (Kann man hier kein Source Code einfügen?)

    Hier habe ich einen Code-Schnipsel der aber nicht funktioniert:

    @IBAction func Startbutton(_ sender: Any) {
    //Quellpfad auslesen und ausgeben
    let Quelle:String = Quellpfad.stringValue
    print(„ausgelesen: \(Quelle))")
    }

    Ich bekomme die Fehlermeldung:
    Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

    Ich wüsste zu gerne, was da falsch ist. Mit „unwrapping an Optional value“ kann ich irgendwie gar nichts anfangen.

    Zu meinem Hintergrund:
    Ich habe als Kind in den 80 und 90er-Jahren viel BASIC programmiert, später auch Assembler auf dem 6502 und ARexx auf dem Amiga, Heutzutage ab und an mal ganz wenig HTML, PHP, Applescript und so. Also nur, wenn ich das mal für irgendetwas persönliches benötige. Swift kenne ich noch gar nicht, finde den Syntax aber um Welten besser als von Applescript.
     
  2. noodyn

    noodyn Mitglied

    Beiträge:
    11.597
    Zustimmungen:
    3.401
    Mitglied seit:
    16.08.2008
    Dann fang doch erstmal mit Tutorials an
     
  3. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
  4. tocotronaut

    tocotronaut Mitglied

    Beiträge:
    22.359
    Zustimmungen:
    4.112
    Mitglied seit:
    14.01.2006
  5. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Ach, unter Betriebsysteme?!? Ich hatte nur iOSApp Entwickler für iOS gefunden. Danke für den Hinweis. :)
    Vielleicht kann das ein Admin dorthin verschieben. Andererseits dürfte das in iOS dasselbe sein.
     
  6. Loki M

    Loki M unregistriert

    Beiträge:
    3.513
    Zustimmungen:
    1.034
    Mitglied seit:
    07.02.2005
    Bester Kurs wo gibt. Kurzweilig und ausgesprochen gute Einsichten in Swift 4:




    Nachtrag: auf iTunes U gibt es auch die Homework - Aufgaben und Slides...
     
  7. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Danke für die Schulung. Dieser Hinweis ist wertvoll für mich. Ich weiß es wirklich zu schätzen.

    Allerdings ist das ja alles irgendwie keine Antwort auf meine Frage. ;-) Es kann natürlich auch sein, das das keiner von Euch weiß – dafür hätte ich auch Verständnis. Man kann eben nicht alles wissen. In diesem Fall müsste ich mich tatsächlich erst durch stundenlang durch Videos quälen, nur um diese eine Frage beantworten zu können. Oder ich mache es eben doch alles von Hand statt ein kleines Progrämmchen dafür zu schreiben.
     
  8. Loki M

    Loki M unregistriert

    Beiträge:
    3.513
    Zustimmungen:
    1.034
    Mitglied seit:
    07.02.2005
    Sieht so aus als wäre ein Outlet nicht gesetzt - die sind etwas gemein, die werden später erst (ich meine in viewWillAppear) gesetzt. Du müsstest hier checken ob das Optional (Outlet) gesetzt oder nil ist.

    „unwrapping an Optional value“ bedeutet auf C oder Java umgelegt: eine Optional ist nicht gesetzt (Optionals sind im Prinzip Variablen, die entweder einen zugeordneten Wert haben oder nil sind). Entspricht einem Zugriff auf einen nicht gesetzten Pointer (in C) oder Nullpointer Exception in Java.

    Wenn du mit Optionals nix anfangen kannst.. Zieh dir Paul Hegarty rein, der erklärt das wunderbar.
    Und ohne Optionals (und App Life Cycle Management) kannst du App Development auf iOS weitgehend vergessen :)

    Ich kann deinem Code nicht ganz folgen.
    Woher stammt der Quellpfad?
     
  9. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Oh, stimmt, der ist gebrochen. Danke! :) Ich korrigiere das mal …
     
  10. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Ah, es tut sich was! :) Allerdings erhalte ich keinen Pfad sondern
    ausgelesen: file:///.file/id=6571367.34496198/
    Gut, dann muss ich da noch mal ein bisschen googeln, wie ich einen Pfad daraus erhalte.
     
  11. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Hmm, wenn ich in XCode ein Testfile vorgebe, wird der Pfad korrekt ausgelesen. Ziehe ich anschließend das Testfile in den Pfad hinein und lese noch mal aus, bekomme ich eine FileID und nicht mehr den Pfad. Das finde ich sehr irritierend!

    In Xcode als default vorgegeben:
    Screenshot 2018-12-09 22.07.58.png

    So sieht es im Storyboard aus:
    Screenshot 2018-12-09 22.08.07.png

    So sieht es im kompilierten Programm aus, bevor ich irgendein File hineingezogen habe:
    Screenshot 2018-12-09 22.08.28.png

    Lese ich das Path Control Object aus, erhalte ich:
    file:///Users/gerhard/documents/Testfile.m4a

    Ziehe ich aber dieselbe Testdatei in das Path Control Object hinein und lese anschließend noch mal aus, dann erhalte ich stattdessen:
    file:///.file/id=6571367.34704030

    Und ich verstehe nicht warum! :-(
    Und ich habe bisher keinen Kursus und keine Website gefunden, wo der Grund dafür genannt wird.
     
  12. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Hier habe ich etwas gefunden, doch das bezieht sich wohl auf eine andere Sprache:

    All of the following entries are valid references to a file called MyFile.txt in a user’s Documents directory:
    • Path-based URL: file://localhost/Users/steve/Documents/MyFile.txt
    • File reference URL: file:///.file/id=6571367.2773272/
    • String-based path: /Users/steve/Documents/MyFile.txt
    Quelle: Accessing Files and Directories
     
  13. Loki M

    Loki M unregistriert

    Beiträge:
    3.513
    Zustimmungen:
    1.034
    Mitglied seit:
    07.02.2005
    Ich glaube dein Problem steht in dem verlinkten Artikel:

    Path-based URL: file://localhost/Users/steve/Documents/MyFile.txt
    File reference URL: file:///.file/id=6571367.2773272/
    String-based path: /Users/steve/Documents/MyFile.txt


    Du kriegst also in dem genannten Beispiel einmal eine Path-based URL und einmal eine File reference URL. Selber Pfad, andere Repräsentation.

    Siehe auch hier: https://developer.apple.com/documentation/foundation/nsurl

    Die andere Sprache ist übrigens Objective-C. Das hat aber insofern keine Relevanz, da die meisten unterliegenden Frameworks in Objective-C geschrieben sind; du kannst bzw. hast ohnehin keine andere Wahl als die von den entsprechenden Frameworks/Klassen bereitgestellte API von Swift aus aufrufen.
    In der Regel gibt es ein kostenfreies Bridging von Objective-C nach Swift; das erkennst du durch das Keyword @objc (zB bei Selektoren) bzw. meist wenn irgendwo ein Parameter des Typs "Any" eingesetzt wird; "Any" ist sozusagen ein Platzhalter für ein Optional, das es in Objective-C nicht gibt.
    Man erkennt Objective-C Klassen idR am Präfix "NS" - wie hier zb NSURL. Diese Klassen gehen zurück auf NextSTEP, was historisch die Basis von Mac OS X ist.

    Der Kurs von Paul Hegarty sei dir nochmal ans Herz gelegt. Gibt eine tolle Grundlage
     
  14. uhlhorn

    uhlhorn Thread Starter Mitglied

    Beiträge:
    2.448
    Zustimmungen:
    124
    Mitglied seit:
    24.05.2005
    Ja, genau. Doch ich weiß nicht warum. Und man findet in Google leider auch nicht viel dazu. Wenn ich in Google nach

    Swift "Path-based URL" "File reference URL" "String-based path“

    suche, finde ich gerade 6 Suchergebnisse. Nichts ist dabei was helfen könnte. Bei

    Swift convert "File reference URL" "String-based path“

    ist es nicht besser.

    Und die ganzen Dokumentationen von Apple sind wie chinesisch für mich. Davon verstehe ich nichts und es sind auch keine nachvollziehbaren Beispiele dabei.

    Ich habe schon alles Mögliche probiert (siehe Auskommentierungen).

    @IBAction func Startbutton(_ sender: Any) {
    //Quellpfad auslesen
    //let FileID:String = Quellpfad.stringValue
    let FileID:String = Quellpfad.stringValue // führt zu einer fileID
    //let FilePath = CFURLGetFileSystemRepresentation(FileID)
    //let FilePath: String = String(contentsOf: FileID)
    //let FilePath = (string as NSString).FileID
    //let FilePath = URL(fileURLWithPath: FileID).lastPathComponent
    //let FilePath:String = FileID.path
    //let FilePath:String = fileURL(withPath, path: FileID)
    print("ausgelesen: \(FileID)")
    //print("ausgelesen: \(FilePath)")
    }
     
  15. Loki M

    Loki M unregistriert

    Beiträge:
    3.513
    Zustimmungen:
    1.034
    Mitglied seit:
    07.02.2005
    Wo ist das Quellpfad.stringValue her?
     
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...