7

Dưới đây là những gì tôi sao chép/dán từ Nhật ký sự cố do khách hàng gửi. Tôi không thể hiểu điều đó có nghĩa là gì: sApp Crashes khi NavigationController được bật lên!

Dường như ứng dụng bị lỗi khi điều hướng quay lại màn hình trước đó (và đó là những gì khách hàng đã báo cáo). UIWebDocumentView ở đây là gì?

Tôi cần giải quyết sự cố nhưng tôi bị kẹt ở đây nên mọi trợ giúp đều được đánh giá cao.

P.S. Tôi đang sử dụng iphone sdk 3.0.

Date/Time:  2009-09-29 18:16:28.458 -0400 
OS Version:  iPhone OS 3.0 (7A341) 
Report Version: 104 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0xbbadbeef 
Crashed Thread: 4 

    Thread 4 Crashed: 

     0 WebCore       0x3588dd74 __ZL17_WebTryThreadLockb + 288 
     1 WebCore       0x3588e4c0 __ZL18_WebThreadAutoLockv + 52 
     2 UIKit       0x30aea484 -[UIWebDocumentView _responderForBecomeFirstResponder] + 8 
     3 UIKit       0x30978b34 -[UINavigationTransitionView transition:fromView:toView:] + 200 
     4 UIKit       0x30978a54 -[UINavigationTransitionView transition:toView:] + 24 
     5 UIKit       0x30974470 -[UINavigationController _startTransition:fromViewController:toViewController:] + 1604 
     6 UIKit       0x30973d90 -[UINavigationController _startDeferredTransitionIfNeeded] + 256 
     7 UIKit       0x309a7468 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 400 
     8 UIKit       0x309a72c8 -[UINavigationController popViewControllerAnimated:] + 32 
     9 Snocell       0x0002ae00 0x1000 + 171520 
     10 Foundation      0x30554062 -[NSThread main] + 42 
     11 Foundation      0x305023f2 __NSThread__main__ + 852 
     12 libSystem.B.dylib    0x31d705a0 _pthread_body + 20 
+1

Ok, tôi đoán tôi đã tìm thấy giải pháp. Chia sẻ nó trong trường hợp ai đó ghé qua đây: EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS có nghĩa là địa chỉ ảo mà bạn đang tham chiếu không có trong bảng trang hoặc bạn không có quyền truy cập. Đó là địa chỉ ảo mà bạn không được phép truy cập. Đối với địa chỉ ví dụ của bạn 0x67696c69 có khả năng đây là thứ không phải là con trỏ được coi là con trỏ; hoặc cấu trúc dữ liệu của bạn có chứa con trỏ được free'd và ghi đè với các dữ liệu khác. Và, sau đó tôi thấy WebCore trong nhật ký, một thành phần trong iPhone WebKit (http://bit.ly/4j4WsN) –

+1

Vì vậy, những gì tôi đã làm ở đây, phân phối một trang web trong UIWebView và trước khi nó có thể tải hoàn toàn, popping quay lại bộ điều khiển chế độ xem trước đó và CRASHED. Tôi thấy rằng UIWebView cần phải được ủy quyền xóa trước khi bạn phát hành; nếu không, nếu yêu cầu web hoàn tất sau khi bạn phát hành UIWebView, nó sẽ cố gắng gọi lại cho người được ủy quyền và khiến ứng dụng gặp sự cố. GIẢI PHÁP: Tôi đã thêm "myWebView.delegate = nil;" trước khi popping xem điều khiển và nó làm việc bây giờ :) –

+1

Tôi đã có một vấn đề tương tự - webView.delegate = nil giải quyết nó, giống như cho bạn. –

Trả lời

15

Ok, tôi đoán tôi đã tìm được giải pháp. Chia sẻ nó trong trường hợp ai đó khác rơi vào tình huống tương tự:

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS có nghĩa là địa chỉ ảo mà bạn đang tham chiếu không có trong bảng trang hoặc bạn không có quyền truy cập. Đó là địa chỉ ảo mà bạn không được phép truy cập. Đối với địa chỉ ví dụ của bạn 0x67696c69 có khả năng đây là thứ không phải là con trỏ được coi là con trỏ; hoặc cấu trúc dữ liệu của bạn có chứa con trỏ được free'd và ghi đè với các dữ liệu khác.

Và, sau đó tôi thấy WebCore trong stack trace trong nhật ký (WebCore là một thành phần trong iPhone WebKit - http://en.wikipedia.org/wiki/WebKit#Components)

Vì vậy, những gì tôi đã làm ở đây, dispalying một trang web trong UIWebView và trước khi nó có thể tải hoàn toàn, popping quay lại các bộ điều khiển chế độ xem trước đó và CRASHED.

Tôi thấy rằng UIWebView cần phải được ủy quyền xóa trước khi bạn phát hành; nếu không, nếu yêu cầu web hoàn tất sau khi bạn phát hành UIWebView, nó sẽ cố gắng gọi lại cho người được ủy quyền và khiến ứng dụng gặp sự cố.

SOLUTION: tôi đã thêm đoạn mã sau trước khi popping xem điều khiển và nó làm việc bây giờ :)

if (webView.loading) 
    [webView stopLoading]; 
webView.delegate = nil; 
+0

Bản sửa lỗi này không hoạt động đối với tôi (mặc dù tôi đã thử nghiệm trên iPhone 2G cũ). Tôi vừa xóa cuộc gọi popViewController. Không phải là giải pháp thông minh nhất nhưng nó hoạt động, và theo một số cách nó hợp lý hơn. –

+0

Nó bật ra rằng loại bỏ các tuyên bố popViewController cố định các vấn đề khác quá. Tôi nghĩ rằng không nên gọi popViewController trong phương thức didFailLoadWithError. –

+0

Cảm ơn, đã giúp ích trong việc tìm ra cho tôi hướng đi đúng đắn để xem xét – 2cupsOfTech

0

Tôi nghĩ rằng đây sẽ là một cách tiếp cận đúng. Đặt đại biểu để nil đầu tiên.

webView.delegate = nil; 
if (webView.loading) 
    [webView stopLoading]; 
Các vấn đề liên quan