Datei-öffnen-Dialog stürzt in Swift

Ich würde gerne mit dem Datei-öffnen-Dialogen aus dem NSFilemanager aber mein code stürzt manchmal und manchmal funktioniert, und ich weiß nicht, warum. Manchmal funktioniert es 100%, manchmal ist das Fenster leer ist, manchmal ist der hintergrund hinter dem dialog ist in dem Fenster angezeigt. Wenn ein craash tritt, "signal:SIGABRT" wird angezeigt, in Xcode.

func openfiledlg (title: String, message: String) -> String
{
    var myFiledialog: NSOpenPanel = NSOpenPanel()

    myFiledialog.prompt = "Öffnen"
    myFiledialog.worksWhenModal = true
    myFiledialog.allowsMultipleSelection = false
    myFiledialog.canChooseDirectories = false
    myFiledialog.resolvesAliases = true
    myFiledialog.title = title
    myFiledialog.message = message
    myFiledialog.runModal()
    var chosenfile = myFiledialog.URL
    if (chosenfile != nil)
    {
        var TheFile = chosenfile.absoluteString!
        return (TheFile)
    }
    else
    {
        return ("")
    }
}

Was habe ich falsch gemacht? Warum ist es abstürzt?

Die App läuft nicht auf dem Haupt-thread. Ich habe immer einen neuen thread aufmachen, läuft mein Programm. Der Main-Thread nur handels den Bildschirm-Updates von SpriteKit, die ich für meine Programme.

Ich habe gerade gebaut, ein neuer Cocoa-Basierte Anwendung, und lassen Sie die Funktion ausführen, die in den main-Thread und dort klappt es. Wenn ich anfange einen Thread in der Kakao-App stürzt ab, wie im SpriteKit Umgebung.

Muss ich einen neuen thread starten, in das Sprite-Kit die Umwelt, denn die updates werden nicht gemacht, wenn ich mein Hauptprogramm direkt aus dem AppDelegate. Das Hauptprogramm läuft weiter, bis das ganze SpriteKit beendet wird, so habe ich keine chance, meine Arbeit zu tun, in dem Haupt-thread.

Der Absturz tritt in der Zeile mit dem runModal() und dann in "NSSavePanel._spAuxiliaryStorage":

0x7fff84dfec20:  movq   -0x10c18197(%rip), %rsi   ; "_refreshDelegateOptions"
0x7fff84dfec27:  movq   %rbx, %rdi
0x7fff84dfec2a:  callq  *%r15
0x7fff84dfec2d:  movq   -0x10c17ed4(%rip), %rsi   ; "_loadPreviousModeAndLayout"
0x7fff84dfec34:  movq   %rbx, %rdi
0x7fff84dfec37:  callq  *%r15
0x7fff84dfec3a:  movq   -0x10b57079(%rip), %r12   ; NSSavePanel._spAuxiliaryStorage <--- Thread 7: signal SIGABRT
0x7fff84dfec41:  movq   (%rbx,%r12), %rax
0x7fff84dfec45:  movq   -0x10b5716c(%rip), %rcx   ; NSSavePanelAuxiliary._clientSetADirectory
0x7fff84dfec4c:  movb   (%rax,%rcx), %al
0x7fff84dfec4f:  shrb   $0x2, %al
0x7fff84dfec52:  andb   $0x1, %al
0x7fff84dfec54:  xorb   $0x1, %al
0x7fff84dfec56:  movzbl %al, %ecx
0x7fff84dfec59:  movq   -0x10c18310(%rip), %rsi   ; "_configureForDirectory:forceDefault:"
0x7fff84dfec60:  movq   %rbx, %rdi
0x7fff84dfec63:  xorl   %edx, %edx
0x7fff84dfec65:  callq  *%r15
0x7fff84dfec68:  movq   -0x10c2d767(%rip), %rsi   ; "drain"
0x7fff84dfec6f:  movq   %r14, %rdi
0x7fff84dfec72:  callq  *%r15
0x7fff84dfec75:  movq   (%rbx,%r12), %rsi

In das Terminal-Fenster wird angezeigt:

CocoaTest(54483,0x106f78000) malloc: *** error for object 0x60800017efc0: Heap corruption detected, free list canary is damaged

Jede Idee, wie dieses problem zu lösen, ohne es innerhalb der main-thread?

  • auf die Linie macht es crash? könntest du einen stacktrace? haben Sie rufen Sie es auf der main-thread? ist Ihre app-Sandboxen und / oder signiert werden?
InformationsquelleAutor j.s.com | 2014-08-24
Schreibe einen Kommentar