Theo như tôi nhớ, rằng tín hiệu popped lên khi một webview nhận một bản cập nhật (ví dụ, một phản ứng từ một hình ảnh nhúng), nhưng nó không thể được trả lại bởi vì nó không được sử dụng bởi chủ đề chính nữa. Điều đó có nghĩa, khi ViewController không được hiển thị.
Nếu trường hợp đó xảy ra, bạn có thể tạo lại vấn đề bằng cách tải trang web có nội dung nặng (ví dụ: một số tờ báo trực tuyến như http://edition.cnn.com/) và loại bỏ chế độ xem web ngay sau khi bắt đầu tải. ViewController.
Làm thế nào để sửa chữa nó: thật vậy, bạn cần phải gọi những phương pháp bạn đề cập:
webview.delegate = nil;
[webview stopLoading];
Tuy nhiên, nơi để làm như vậy là vào phương pháp viewWillDisappear
, không bao giờ trên dealloc
. Lý do rất đơn giản: viewWillDisappear
được gọi vào đúng thời điểm mà ViewController sắp mất kiểm soát của chuỗi chính. Tuy nhiên, dealloc
được gọi khi VC sắp được phát hành vào heap. Điều này có thể xảy ra vài giây sau, khiến ứng dụng mất thời gian quý báu, hoặc có thể sẽ không bao giờ được gọi. Di chuyển cả hai phương pháp có nên làm các trick.
được bạn nhắm mục tiêu gì iOS phiên bản? Bạn đang gọi 'webview.delegate = nil' và '[webview stopLoading]' ở đâu? – JAL
Tôi đang nhắm mục tiêu iOS7 +. Có lẽ phiên bản tiếp theo sẽ là 8+. delegate = nil được gọi trong dealloc. stopLoading được gọi trong chế độ xemWillDisappear. – Division
Tôi khá chắc chắn đây là lỗi nội bộ của webkit (xuất hiện trong iOS 7 nhưng đã được sửa bằng iOS 8), nơi giải pháp chính thức từ Apple sẽ là "nâng cấp lên iOS 8." Tôi cũng sẽ thử thay đổi bất cứ nơi nào bạn đang gọi 'webview.delegate = nil' và' [webview stopLoading] ', thử gọi nó trong' viewWillDisapear' hoặc 'dealloc'. – JAL