2011-11-05 21 views
6

Điều này nghe có vẻ là một câu hỏi mới, tuy nhiên tôi mới là người phát triển iOS.Thay đổi điều hướngController.delegate nguyên nhân truy cập kém

Tôi đã xem chế độ xem trong navigationController, giả sử đây là chế độ xem được đẩy thứ 3. Trong chế độ xem đó, tôi đặt self.navigationController.delegate = self;. Tôi đã thay đổi đại biểu vì tôi cần xử lý trường hợp khi người dùng chuyển đến chế độ xem trước, tức là bật từ chế độ xem hiện tại.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if ([[viewController class] isEqual:[MainViewController class]]) { 
     ... 
    } 
} 

Nó hoạt động OK, nhưng khi tôi bật chế độ xem hiện tại và nhấn lại nút điều hướng (tức là chuyển sang chế độ xem được đẩy đầu tiên), tôi gặp phải lỗi truy cập không hợp lệ.

Vì vậy, những gì tôi đang thiếu? Cách chính xác để xử lý nút điều hướng quay lại là gì?

Trả lời

3

Đó là do trình điều khiển điều hướng gửi tin nhắn đến bộ điều khiển chế độ xem được hiển thị và được phân phối lại, bạn phải đặt đại biểu mỗi khi bạn thực hiện thao tác bật và đẩy. Ngoài ra, thêm self.navigationController.delegate = nil; vào phương thức dealloc của chế độ xemController của bạn.

+0

thực sự thiết lập đại biểu để nil trong dealloc không giúp ... Trong trường hợp của tôi, quan điểm thứ 3 thực hiện UINavigationControllerDelegate sự những người khác thì không? Vì vậy, nơi nào tôi cần phải thiết lập đại biểu để tự, trong tất cả các quan điểm? – deimus

+1

Nếu tôi đã cho bạn ủy quyền chính xác, bạn nên đặt thành 0 trong chế độ xem nếu được đặt ở chế độ tự động mỗi khi bạn đẩy hoặc bật. Ít nhất tôi đã làm như vậy và nó có vẻ làm việc ... Vui lòng xác nhận – deimus

+0

Vâng tất nhiên nó phải được thiết lập cho mỗi bộ điều khiển xem. Xác nhận. Lý do tại sao bạn nên thiết lập đại biểu để nil, là để tránh "lủng lẳng" con trỏ (con trỏ đến bộ nhớ deallocated). EXC_BAD_ACCESS thường xảy ra khi bạn gửi một tin nhắn đến đối tượng deallocated và kể từ khi đại biểu của bộ điều khiển chuyển hướng của bạn là một đối tượng deallocated bạn đã nhận được lỗi đó. – Eugene

0

Nơi dưới đây trong ViewController trong đó bạn gán self.navigationController.delegate = tự

-(void) viewWillDisappear:(BOOL) animated 
{ 
    [super viewWillDisappear:animated]; 
    if ([self isMovingFromParentViewController]) 
    { 
     if (self.navigationController.delegate == self) 
     { 
      self.navigationController.delegate = nil; 
     } 
    } 
} 
Các vấn đề liên quan