2014-11-06 10 views
8

Sto usando un dizionario per valutare un'espressione, quando l'espressione ha variabili e il dizionario è effettivamente usato da NSExpression, succede qualcosa e ottengo EXC_BAD_ACCESS quando provo ad aggiornare il dizionario, questo accade solo quando si esegue il debug in un iPhone6, non nel simulatore e non in un iPhone 4S.EXC_BAD_ACCESS quando si aggiorna il dizionario Swift dopo averlo usato per valutare NSExpression

let strExpression = "a+b+20" 
    let exp = NSExpression(format:strExpression) 
    self.dictionary = ["a":10.0, "b":15.0, "c":25.0] 
    let value:AnyObject = exp.expressionValueWithObject(self.dictionary, context: nil) 
    let doubleValue = value as Double 
    self.dictionary.updateValue(doubleValue, forKey: "c")  

Qualcosa di veramente strana è che se aggiungo questa linea solo dopo aver creato il dizionario, allora woks bene:

let newDic = self.dictionary  

io, sto utilizzando iOS 8.1. Grazie in anticipo!

+1

Viene self.dictionary dichiarata con let o var? –

+2

Si ritiene che sia un bug del compilatore. Ho vissuto la stessa cosa. Vedi http://stackoverflow.com/questions/26809986/exc-bad-access-on-ios-8-1-with-dictionary – steventnorris

+0

Grazie @juanelomx !!! Lo stesso bug e hack con 'let' mi ha aiutato – Aznix

risposta

0

Con il commento @bensarz, ho pensato che potrebbe essere utile per gli altri alla ricerca di risposte se inserisco la risposta in una risposta effettiva anziché in un commento.

Per la risposta di @ LeeWhitney su un post simile:

Sembra un bug del compilatore.

Hai provato a passare tra Release e Debug e poi a ricostruire? Se il debug funziona ma non viene rilasciato, può essere un'indicazione di un bug del compilatore/ottimizzatore.

Accade anche nel simulatore?

Il codice funziona per me su iOS 8.1 con XCode 6.1.

Soluzione: Il problema sembra essere risolto modificando il 'livello di ottimizzazione' sotto la 'Swift compilatore - Generazione di codice' 'Nessuno'. Il problema sembra essere con il livello di ottimizzazione del compilatore "più veloce".

Inoltre, un lavoro intorno che ho trovato originale prima della modifica compilatore:

Se si utilizza un istruzione let prima di assegnare i valori nel dizionario, sembra per alleviare il problema. Maggiori informazioni contenute in link qui sotto:

EXC_BAD_ACCESS on iOS 8.1 with Dictionary

Problemi correlati