2010-03-25 31 views
7

Tôi gặp lỗi khi ứng dụng của tôi bị lỗi "EXC_BAD_ACCESS" khi tôi nhấn phím trở lại trên thanh điều hướng của mình và chế độ xem đã tải MapKit (mapView) và sử dụng Trình quản lý vị trí. Cố gắng trong nhiều ngày để sửa chữa các lỗi và cuối cùng đã đưa ra một bản sửa lỗi cho bất cứ ai đi qua vấn đề này:MapKit/Trình quản lý vị trí gặp sự cố khi tải chế độ xem

Thêm mã này để dealloc của bạn

- (void)dealloc { 
    mapView.delegate = nil; 
    locationManager.delegate = nil; 

    [mapView release]; 
    [locationManager release]; 
} 
+0

Cảm ơn, người đàn ông! Điều kỳ lạ là bạn không thể tái tạo nó trong trình giả lập. –

+0

Vui lòng cung cấp thêm chi tiết triển khai. Nó trông giống như một số obj. đã được phát hành. Btw, đó là thói quen tốt để không có đại biểu trong dealloc. – kompozer

+0

Nếu không thấy nhật ký sự cố, bạn không thể biết được. Nhưng có vẻ như bạn đang phát hành một cái gì đó hai lần. thử thêm NSZombieEnabled, điều này sẽ cho bạn biết nếu bạn đang cố gắng truy cập một cái gì đó trong bộ nhớ đã được phát hành. – CW0007007

Trả lời

0

Tôi có cái này quá, :) Và, vâng , sửa chữa này thực sự là một sửa chữa thích hợp;

- (void)dealloc { 
    mapView.delegate = nil; 
    locationManager.delegate = nil; 

    [mapView release]; 
    [locationManager release]; 
} 

gì xảy ra đằng sau hậu trường là thế này:

  1. Bạn nhấn backkey. Điều này unloads và hậu quả phát hành bộ điều khiển mà giữ mapView. Vì đã có khá khả năng chỉ có một tham chiếu duy nhất cho bộ điều khiển nó sẽ được dealloc'ed sau đó.

  2. Trình quản lý vị trí, tuy nhiên, rất có thể vẫn được tham chiếu ở đâu đó trong các hoạt động bên trong của việc định vị địa lý.

  3. Nếu locationManager và/hoặc mapView hiện gửi thông báo tới đại biểu tương ứng của họ, họ đang theo dõi một con trỏ không hợp lệ. Điều này sẽ dẫn đến ngoại lệ EXC_BAD_ACCESS.

Có: làm ơn các đại biểu trỏ đến bản thân luôn là ý tưởng hay. Tôi chỉ ước Apple sẽ thêm một số automagic ở đó.

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