2014-11-06 13 views
8

Używam słownika do oceny wyrażenia, gdy wyrażenie ma zmienne, a słownik jest faktycznie używany przez NSExpression, coś się dzieje i otrzymuję EXC_BAD_ACCESS przy próbie aktualizacji słownik, dzieje się tak tylko podczas debugowania w telefonie iPhone6, a nie w symulatorze, a nie w iPhone 4S.EXC_BAD_ACCESS przy aktualizacji słownika Swift po użyciu go do oceny 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")  

Coś naprawdę dziwne jest to, że jeśli dodać tę linię tuż po utworzeniu słownika, to woks porządku:

let newDic = self.dictionary  

Ja używam iOS 8.1. Z góry dziękuję!

+1

Czy self.dictionary zadeklarowana z wylotem lub var? –

+2

Prawdopodobnie jest to błąd kompilatora. Doświadczyłem tego samego. Zobacz http://stackoverflow.com/questions/26809986/exc-bad-access-on-ios-ios-8-1-with-dictionary – steventnorris

+0

Dzięki @juanelomx !!! Ten sam błąd i hack z 'let' pomógł mi – Aznix

Odpowiedz

0

Z komentarzem @bensarz, pomyślałem, że może być pomocny dla innych, którzy szukają odpowiedzi, jeśli umieściłbym odpowiedź w odpowiedzi zamiast komentarza.

Per użytkownika @ LeeWhitney odpowiedzi na podobnym stanowisku:

Wygląda jak błąd kompilatora.

Czy próbowałeś przełączać się między wersją i debugowaniem, a następnie przebudowałeś? Jeśli debugowanie działa, ale nie jest wydawane, może wskazywać na błąd kompilatora/optymalizatora.

Czy to się dzieje również w symulatorze?

Twój kod działa dla mnie na iOS 8.1 z XCode 6.1.

Rozwiązanie: Problem wydaje się być rozwiązany przez zmianę poziomu optymalizacji „” pod „Swift Compiler - Code Generation” na „None”. Wydaje się, że problem dotyczy "Najszybszego" poziomu optymalizacji kompilatora.

Również obejść, że znalazłem oryginalny przed zmianą kompilatora:

Jeśli używasz oświadczenie let przed przypisywania wartości w słowniku, to wydaje się, aby złagodzić ten problem. Więcej informacji znaleźć na link poniżej:

EXC_BAD_ACCESS on iOS 8.1 with Dictionary