Apfel hat ein private helper _printHierarchy
in iOS8, die in LLDB Konsole verwendet werden können:Wie verwenden Sie _printHierarchy in LLDB-Konsole mit Swift?
po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
, die die ganze View-Controller-Hierarchie in Textform ausgedruckt.
Dies funktioniert nur, wenn Sie Code auf Objective C. In Swift debuggen, aber das funktioniert nicht:
(lldb) po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
error: <EXPR>:1:13: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,
<EXPR>:1:24: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,
<EXPR>:1:44: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,
Eine äquivalente Verwendung in Swift funktioniert auch nicht:
po UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy
endet mit einem Fehler auf (wahrscheinlich, weil _printHierarchy
ein Privateigentum ist):
(lldb) po UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy()
error: <EXPR>:1:64: error: 'UIViewController' does not have a member named '_printHierarchy'
UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy
^~~~~~~~~~~~~~~~
Die Frage ist: Wie kann man die View Controller Hierarchie in Swift ausdrucken? Oder gibt es eine Möglichkeit, ObjC in der LLDB-Konsole auch in Swift-Projekten zu verwenden?
Hmm, habe ich versucht, und Ich habe meine Frage aktualisiert mit einem Fehler werde ich in der Konsole. –
@TomKraina Wenn Sie einen Breakpoint im Swift-Code verwenden, befinden Sie sich in einem Swift-Frame und "po" erwartet Swift-Ausdruck. Wenn Sie jedoch während der Ausführung des Swift-Programms nur die Pause-Taste drücken (was ich oft tue), sind Sie höchstwahrscheinlich nicht in einem Swift-Frame, wenn Sie die Eingabeaufforderung "(lldb)" erhalten Der Objective-C-Ausdruck ist in Ordnung. Glücklicherweise können Sie, wenn Sie die App im Swift-Frame anhalten, explizit die Option '--language' (oder' -l') angeben, um anzugeben, dass der Objective-C-Ausdruck interpretiert werden soll, selbst wenn Sie sich im Swift-Frame befinden . Siehe überarbeitete Antwort. – Rob
Das ist cool! Ich wusste nicht, dass du eine Sprache in "lldb" angeben kannst! –