2016-04-21 10 views
9

Ho un oggetto C obiettivo che possiamo chiamare ObjCObj Ho implementato un metodo di descrizione semplice che di solito funziona perfettamente se instanzassi la classe in una variabile locale.Provare a stampare la descrizione dell'oggetto in Xcode produce un errore

Il problema: ho scorrere un array di oggetti ObjCObj e li ho messi in un array di Swift

let cacheArray = [ObjCObj]() 

Dopo la mia matrice viene riempita, cerco impostare un punto di interruzione, provare a stampare il valore di un elemento e ottengo il seguente errore:

expression produced error: 

/var/folders/w9/3rvg1bk95379dgvcr11n16_h0000gp/T/lldb/3499/expr878.swift:1:46: error: use of undeclared type '__ObjC' 
$__lldb__DumpForDebugger(Swift.UnsafePointer<__ObjC.ObjCObj>(bitPattern: 0x67fd9b0).memory) 

Se provo a stampare un espressione del tipo:

cacheArray[2] 

Funziona. Ma se apro l'array nell'ispettore debugger e scelgo una riga dell'array e chiedo di stampare la descrizione, fallisce.

+0

Ciao @ Mikael, imbattendosi in qualcosa di simile. Hai trovato qualche soluzione/soluzione per questo? –

+0

Per ora, implemento debugDescription nei miei oggetti per visualizzare le informazioni di cui ho bisogno. Accedo anche direttamente alle proprietà degli oggetti nella console. po myarray.count o cose del genere. – Mikael

risposta

3

Stavo ricevendo lo stesso errore solo pochi istanti fa e l'ho rintracciato in un attributo di proprietà errato in una delle mie classi di modello Obj-C Mantle. (Erroneamente trattata un oggetto come uno scalare.)

rotto:

@property(nonatomic, assign, readonly, nullable) AdditionalInformationStatus *additionalInformationStatus; 
        ^^^^^^ 

fisso:

@property(nonatomic, copy, readonly, nullable) AdditionalInformationStatus *additionalInformationStatus; 
        ^^^^ 

E 'stata una soluzione semplice, ma difficile da rintracciare.

+0

beh, non so perché dovremmo cambiare questa proprietà in modo che xcode stampi semplicemente una variabile:/ – Mikael

+1

Questo non mi ha solo impedito di stampare valori, ma ha anche causato il crash della nostra app. Quando ho aggiunto un punto di interruzione per interrogare il valore, ho ricevuto lo stesso errore che hai ricevuto. Quando ho azzerato il problema, è stato chiaramente un errore da parte nostra. Avevamo intenzione di conservare una copia dell'oggetto, ma invece abbiamo fatto un semplice assegnamento come si farebbe per un delegato, il che significava che il nostro numero di riferimenti oggetto non aumentava, il che causava la sua deallocazione, che causava l'arresto ... (e il messaggio di errore non utile sopra) –

+0

Disabilitare Addess Sanitizer risolve il problema apparentemente. Non per tutte le situazioni però. – Mikael