2015-03-25 7 views
13

Ci sono molte domande su Stack Overflow relative a questo errore. Ho letto alcuni post eccellenti su how Optionals work e questo error in particular. Tuttavia, non ho trovato alcuna informazione sul modo migliore per capire quale valore è stato impostato su zero e causare l'errore in primo luogo.Come eseguire il debug dell'errore irreversibile: trovato inaspettatamente nil mentre si scartava un valore facoltativo '

Esistono buone tecniche di debug per scoprire quale Optional sta causando questo errore?

risposta

0

Xcode non si arresta alla riga di codice errata?

Questo non risposta alla domanda, ma è importante notare:

When you are not sure about an optional variable, you have to verify if it contains value or not, by using a pattern like this: 

var myOptional : String? 
if let aString = myOptional { 
    //do your work with aString. 
} 
+0

Non è questo .... /: | – Radu

-2

Quale valore fondamentalmente opzionale è "?" quando posizioni? dopo un tipo di dati che è facoltativo mentre se è stato scartato e appare un nil non c'è errore ma si inserisce "!" punto esclamativo dopo il tipo di dati, allora se scartare la variabile e zero appare poi c'è incidente o un errore così spesso uso opzionale come

var myVariable : DataType ? = DataType() 
or 
var myVariable : DataType ? = nil 
or 
var myVariable : DataType ? = value 

Un optional a Swift è una variabile che può contenere un valore o nessun valore. Gli optionals sono scritti aggiungendo un? del tipo:

var myOptionalString:String? = "Hello" 

alcuni luoghi optional sono utili:

  • Quando una proprietà può essere lì o non c'è, come middleName o coniuge in una classe Persona
  • Quando un metodo può restituire un valore o nulla, come alla ricerca di una corrispondenza in un array
  • Quando un metodo può restituire un risultato o ottenere un errore e
  • non restituire nulla
  • Proprietà del delegato (che non devono essere sempre impostate)
  • Per proprietà deboli nelle classi. La cosa a cui puntano può
    essere impostato a zero
  • Per una grande risorsa che potrebbe avere per essere rilasciato a
    memoria recupero

https://medium.com/@rrridges/swift-optionals-a10dcfd8aab5

34

Ecco almeno la metà di una risposta (sarebbe il altri rispondenti per favore leggi prima la domanda!): usa il simulatore invece di un vero dispositivo iOS.

Il debugger sembra essere piuttosto bravo a indicare la linea con l'opzione maltrattata che causa il problema ... a meno che tu non sia come me, scegliendo di eseguire il codice su un dispositivo iOS direttamente di volta in volta. In quest'ultimo caso, il debugger mi atterra nel bel mezzo di un codice assembler senza traccia di stack sensibile. Il ritorno al simulatore fornisce la riga esatta del codice in errore.

+1

Grazie, è grandioso. Buono a sapersi! –

+2

Questo è quello che dovevo sapere. Ho * che * il problema è, ma avevo bisogno di capire * dove * il problema è per risolverlo, e nessuno dei punti di interruzione che ho impostato mentre indovinando ciecamente era stato colpito. –

+0

ha funzionato per me. Xcode è un tale asino a volte ... C'è una ragione tecnica per questo? – CW0007007

Problemi correlati