2014-09-05 12 views
9

Tôi vừa mới cài đặt XCode6 Beta-7 và bây giờ nhìn thấy một ngoại lệ truy cập vào một trong các phương pháp PrepareForSegue của tôi - (gọi khi một phương thức Segue là về để thư giãn)xcode6 beta7 prepareForSegue ném EXC_BAD_ACCESS

Mã trong câu hỏi trông như thế này:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 


    if (segue.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
     //Never gets here... 
    } 


} 

tôi đã cố gắng làm cho các tham số segue một tùy chọn nhưng như xa như Swift là có liên quan, segue không phải là con số không, vì vậy ngay cả với một tấm séc như dưới đây, tôi có sự thất bại tương tự .. .

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) { 

    if (segue != nil) 
     if (segue!.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
      //Never gets here... 
     } 
    } 


} 

Tất cả các phân đoạn khác trong ứng dụng dường như hoạt động tốt, nhưng điều này là không - và dường như chỉ xảy ra trong trường hợp thư giãn được phát hành. Bất cứ ai khác gặp phải điều này?

EDIT/Cách giải quyết

Một cách giải quyết đơn giản là để tránh sử dụng các phương pháp unwindSegue và chỉ cần gọi dismissViewControllerAnimated, nhưng tôi vẫn rất muốn biết lý do tại sao phương pháp unwindSegue là không trong trường hợp này ...

Rất cám ơn!

+0

Chỉ cần suy nghĩ: Bạn có làm sạch thư mục xây dựng của mình sau khi nâng cấp lên Beta 7 không? – zisoft

+0

Mmm .. không may mắn với sạch sẽ. (nhắc nhở tốt mặc dù - mà bắt gặp tôi với một vài trong số các betas trong quá khứ cũng :)) – Nash

+3

Tôi đã có một vấn đề tương tự với một segue. Hãy thử điều này: cho mỗi segue trong Interface Builder mà bạn đã có * không * có một định danh, gõ một cái gì đó trong, loại bỏ nó, sau đó nhấn trở lại. Sau đó, xây dựng lại và thử lại. Tôi đã có một segue không có định danh mà tôi muốn thêm vào trong một phiên bản beta trước đó, và nó đã được rằng đã gây ra vấn đề. Bằng cách buộc nó phải được thiết lập lại để không nhận dạng * một lần nữa * trong Xcode mới nhất, tôi đoán tôi đã thay đổi một cái gì đó trong xib cần thiết để khớp chính xác với một số mã thời gian chạy trong bản beta mới nhất. –

Trả lời

14

Như Matt Gibson đã tìm ra việc thêm và loại bỏ định danh phân biệt sẽ khắc phục được sự cố.

Lý do lỗi là Xcode theo mặc định không thêm số nhận dạng cho khoảng cách thư giãn.

Các segue Thư giãn mặc định trong kịch bản trông như thế này:

<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/> 

Trong Objective-C này không phải là một vấn đề, segue.identifier sẽ là con số không. Trong Swift identifier được khai báo là String, một chuỗi không bắt buộc. Tuy nhiên, số nhận dạng vẫn là số không trong bảng phân cảnh, do đó, SDK trả về nil khi nó cho biết nó trả về một chuỗi không bắt buộc. Điều này bị treo khi chạy.

Khi bạn đã thay đổi và xóa số nhận dạng trong bảng phân cảnh, số nhận dạng sẽ là "", một chuỗi trống.

<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/> 

Trong đó tất nhiên sửa chữa vấn đề, bởi vì một chuỗi rỗng phù hợp với giá trị trả về quy định của identifier getter.

Tôi đã gửi radar cho việc này. Bạn nên lừa nó trong Apples Bug Reporter

+0

Thật tuyệt, vui vì tôi đã chỉ đúng hướng. Cảm ơn bạn đã đào sâu hơn vào những gì đang diễn ra đằng sau hậu trường. –

+0

Để thêm vào điều này, segue mà tôi đã sử dụng không phải là vấn đề như nó đã định nghĩa một định danh. Vấn đề của tôi là một sự khác biệt trong bảng phân cảnh không có số nhận dạng. –

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