2014-11-06 15 views
8

Tôi đang sử dụng từ điển để đánh giá biểu thức, khi biểu thức có biến và từ điển thực sự được NSExpression sử dụng, điều gì đó xảy ra và tôi nhận được EXC_BAD_ACCESS khi cố gắng cập nhật từ điển, điều này chỉ xảy ra khi gỡ lỗi trong iPhone6, không phải trong trình mô phỏng và không phải trong iPhone 4S.EXC_BAD_ACCESS khi cập nhật từ điển Swift sau khi sử dụng nó để đánh giá 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")  

Something thực sự kỳ lạ là nếu tôi thêm dòng này chỉ sau khi tạo từ điển, sau đó nó woks tốt:

let newDic = self.dictionary  

I, đang sử dụng iOS 8.1. Cảm ơn trước!

+1

là self.dictionary khai báo với let hoặc var? –

+2

Được cho là lỗi trình biên dịch. Tôi đã trải nghiệm như vậy. Xem http://stackoverflow.com/questions/26809986/exc-bad-access-on-ios-8-1-with-dictionary – steventnorris

+0

Cảm ơn @juanelomx !!! Cùng một lỗi và hack với 'let' đã giúp tôi – Aznix

Trả lời

0

Với nhận xét @bensarz, tôi nghĩ rằng có thể hữu ích cho những người khác đang tìm kiếm câu trả lời nếu tôi đưa câu trả lời vào câu trả lời thực tế thay vì nhận xét.

mỗi phản ứng @ LeeWhitney về một bài tương tự:

Trông giống như một lỗi biên dịch.

Bạn đã thử chuyển đổi giữa Bản phát hành và Gỡ lỗi rồi xây dựng lại? Nếu gỡ lỗi hoạt động nhưng không phát hành nó có thể là một dấu hiệu của một trình biên dịch/lỗi tối ưu hóa.

Điều đó có xảy ra trong trình giả lập không?

Mã của bạn hoạt động trên iOS 8.1 với XCode 6.1.

Giải pháp: Vấn đề này dường như được giải quyết bằng cách thay đổi 'Tối ưu hóa Cấp' dưới 'Swift Compiler - Code Generation' thành 'Không'. Vấn đề có vẻ là với mức tối ưu hóa 'Trình biên dịch' nhanh nhất.

Ngoài ra, một công việc xung quanh mà tôi đã tìm thấy gốc trước khi thay đổi trình biên dịch:

Nếu bạn sử dụng một tuyên bố let trước khi gán giá trị trong từ điển, có vẻ như để làm giảm bớt vấn đề này. Biết thêm thông tin tìm thấy tại liên kết dưới đây:

EXC_BAD_ACCESS on iOS 8.1 with Dictionary

Các vấn đề liên quan