2014-11-07 15 views
13

tôi có một đối tượng truy cập thông qua một var tĩnh trong một cấu trúc (workaround cho việc thiếu hỗ trợ biến lớp trong nhanh chóng ngay bây giờ), có cấu trúc như thế này:EXC_BAD_ACCESS trên iOS 8.1 với từ điển

struct Constants{ 
    static var myObj = MyObject() 
} 

MyObject có từ điển trong nó như vậy:

class MyObject{ 
    private var params = Dictionary<String,AnyObject>() 

    func addParam(key:String, value:AnyObject){ 
     params[key] = value 
    } 
} 

Bây giờ trên các cuộc gọi đầu tiên để đối tượng này cho Contants.myObj.addParam("param", value:123) tất cả là tốt và params có nội dung ["param":123]. Trong lần gọi thứ hai cho số Contants.myObj.addParam("param", value:456), tôi nhận được EXC_BAD_ACCESS.

Đây là phần khởi động, điều này chỉ xảy ra trong iOS 8.1. Ngoài ra, nếu tôi thêm dòng let stupidHack = self.params làm dòng đầu tiên của phương pháp addParam, nó hoạt động tốt. Giả định của tôi là nó đề cập đến tính đột biến của từ điển. Việc cho phép bằng cách nào đó có thể kích hoạt từ điển để có thể thay đổi một lần nữa sau khi khởi tạo.

Có ai khác đã gặp sự cố này trước đây không? Bất kỳ ý tưởng về cách sửa chữa nó?

Cảm ơn!

+0

Tôi gặp sự cố tương tự với ứng dụng Mac mà tôi đang xây dựng. Tôi đã bị rơi vào lần thứ ba, bất kể chuyện gì đã xảy ra. Bạn đang để cho phương pháp stupidHack làm việc cho tôi. Vì vậy, kỳ lạ, nhưng cảm ơn! –

Trả lời

5

Trông giống như lỗi trình 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.

+0

Nó hoạt động tốt trong trình giả lập, nhưng không hoạt động trên thiết bị vật lý (IPhone 6). – steventnorris

+0

Sự cố này chỉ xảy ra ở chế độ phát hành, rất lạ – Zipme

+0

Điều này dường như là một loại lỗi nào đó. Tuy nhiên, việc hack tôi đăng ở trên không khắc phục được vấn đề. Giả định của tôi là nó đề cập đến tính đột biến của từ điển. Việc cho phép bằng cách nào đó có thể kích hoạt từ điển để có thể thay đổi một lần nữa sau khi khởi tạo. – steventnorris

1

Tình cờ, bạn có iPhone 6 với 64Gb không? Tôi có một và tôi đã gặp vấn đề tương tự khi sử dụng Từ điển hai lần.

Trong tin tức (cũng là tin tức công nghệ ...), tôi đọc rằng các mô-đun bộ nhớ bị lỗi do Toshiba cung cấp cho chính xác mẫu iPhone này có thể gây ra phân bổ không chính xác trong bộ nhớ.

0

Đối mặt với loại vấn đề tương tự với mã nhanh và cố định các vấn đề như vậy bằng cách tắt tối ưu hóa trình biên dịch nhanh trong cài đặt xây dựng của mục tiêu ứng dụng.

0

Thử điều chỉnh mức tối ưu hóa trình biên dịch Swift thành "Không" (Cài đặt bản dựng).

Tôi đã gặp vấn đề tương tự với một lớp đang bị deallocated không có lý do rõ ràng, nó chủ yếu là một lỗi trình biên dịch như Lee nói.

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