2014-06-09 13 views
29

Ho un setpoint di interruzione e desidero stampare la panoramica del mio UITextField. Tipo I po myTextField.superview ma ricevo il seguente errore:Xcode LLDB Print Statements Fail - NSUndoManager

error: instance method 'undoManager' has incompatible result types in different translation units ('id' vs. 'NSUndoManager *') 
note: instance method 'undoManager' also declared here 
error: 1 errors parsing expression 

Cosa significa e come posso stampare la mia superview? Ho trovato un collegamento che fornisce una soluzione janky nel codice: http://openradar.io/15890965, ma mi piacerebbe una soluzione migliore.

+0

Stessa storia qui: provo 'po tableView.gestureRecognizers' su una categoria di' UITableView'. – Drux

+3

Ho visto questo errore molte volte quando provavo a po frame, bounds, recursiveDescription, constraint, ecc. (Solo metodi built-in). Sembra essere un bug xcode/lldb paralizzante. – kylefinn

risposta

2

Persone del mondo: ho una risposta!

a schivare tutti gli errori UIKit: Prima di digitare la vostra dichiarazione po, digitare la riga - expr @import UIKit

Se si desidera attivare questo su per la vostra applicazione a livello globale, quindi aggiungere il seguente punto di interruzione nella vostra applicazione delegato:

enter image description here

Grazie a Craig Hockenberry e Steve Streza per l'aggiornamento (che si trova here).

+0

Questo articolo spiega come attivarlo per tutti i progetti: http://merowing.info/2015/12/little-things-that-can-make-your-life-easier-in-2016/ – rizzes

0

Il numero myTextField indica davvero un numero UITextField? Questa è una ragione per cui questo errore verrà visualizzato. Ad esempio, il seguente codice verrà compilato e, se imposto un breakpoint sulla terza riga, è possibile immettere po b.superview per riprodurre l'errore che si è verificato.

NSString *a = @"not a view"; 
UITextField *b = (UITextField *)a; 
UIView *view = b.superview; 

provare a digitare al prompt po [myTextField class] LLDB per vedere se in realtà è un UITextField. Potrebbe essere un altro tipo di oggetto o nil.

+0

'myTextField' punta a un' UITextField' (attraverso una presa). – rizzes

1

La soluzione che utilizzo per impedire questo errore durante il debug è di cast esplicito tutto.

Nel tuo caso avrei fatto

po [(UITextField *)myTextField superView] 
+0

Dai test iniziali, sembra funzionare per me. Tuttavia, il secondo commento nel link sopra (http://openradar.io/15890965) afferma che ciò accade anche per loro, anche quando vengono espressi. Qualcun altro vuole entrare in casa? – rizzes

+0

Ho provato a trasmettere esplicitamente e ancora ottengo questo errore. per esempio. po (NSString *) [((IBAdBannerView *) adView) recursiveDescription] –

1

Hai qualche metodi di accesso personalizzati per 'myTextField'? Ho visto questo stesso numero un certo numero di volte e di solito è causato dal tentativo di stampare una proprietà per un oggetto che viene inizializzato la prima volta che viene chiamato il suo getter. Ad esempio, se provo a eseguire "po self.imageView.contentMode" su un UITableViewCell ottengo lo stesso errore. Prova a spostare il punto di interruzione in un punto del codice in cui sai che "myTextField" è stato completamente inizializzato.

+0

Non ho un metodo di accesso personalizzato per myTextField. Buon pensiero però. – rizzes

0

Ho ricevuto questo errore in Xcode 5.1.1 e l'ho risolto chiudendo Xcode 5.1.1 e provando Xcode 6. Il riavvio di Xcode 5.1.1 per Xcode 5.1.1 potrebbe funzionare anche per alcune persone.

+0

Non ho ancora trovato questo errore con Xcode 6, quindi Apple potrebbe averlo risolto. Ci vorrà ancora un po 'di tempo prima che siamo sicuri. – rizzes