2012-05-10 22 views
7

Tôi đang cố gắng kết hợp một ứng dụng iPad bằng UISplitViewController và bảng phân cảnh. Chế độ xem chính bắt đầu bằng trình điều khiển điều hướng được liên kết với chế độ xem bảng gồm 6 tùy chọn trình đơn. Mỗi ô trong bảng sẽ đẩy một bộ điều khiển xem bảng khác nhau lên ngăn điều hướng. Điều này làm việc tốt cho chế độ xem chính. Mỗi chế độ xem chính có một danh sách bảng mà khi được nhấp cần phải hiển thị một trình điều khiển chế độ xem khác trong ngăn chi tiết. Tôi đã thực hiện điều này với một segue được đặt thành 'Replace' và 'Split chi tiết' hoạt động lần đầu tiên một hàng được nhấp vào, nhưng ngay sau khi bạn nhấp vào một hàng khác trong chế độ xem chính hoặc xoay thiết bị thì lỗi ứng dụng với EXC_BAD_ACCESS.iOS - UISplitViewController với bảng phân cảnh - nhiều chế độ xem chính và nhiều chế độ xem chi tiết

Tôi khá chắc chắn rằng các sự cố của tôi liên quan đến cách ủy quyền được thiết lập cho UISplitViewController. Tôi đang bối rối như thế nào này nên được sử dụng khi tôi có nhiều chủ VC và nhiều chi tiết VCs. Mã đại biểu nên được đặt ở đâu - chính hoặc chi tiết? Tôi có phải thực hiện các sự kiện giao thức UISplitViewControllerDelegate trong mỗi bộ điều khiển xem không?

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

16

Nếu bộ điều khiển chế độ xem phân tách là bộ điều khiển chế độ xem chi tiết đã được thay thế, đây là nguyên nhân gây ra sự cố. Bộ điều khiển xem chi tiết được thay thế đang được dealloc'd và do đó ủy nhiệm bộ điều khiển xem chia tách không còn là tham chiếu đến đối tượng hợp lệ nữa.

Bạn có thể cập nhật đại biểu trong preparForSegue: sender :. Ví dụ:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"MySegue"]) { 
     UIViewController *destinationViewController = [segue destinationViewController]; 
     if ([destinationViewController conformsToProtocol:@protocol(UISplitViewControllerDelegate)]) { 
      self.splitViewController.delegate = destinationViewController; 
     } 
     else { 
      self.splitViewController.delegate = nil; 
     } 
    } 
} 

Bộ điều khiển chế độ xem bạn sử dụng cho đại biểu phụ thuộc vào hệ thống phân cấp bộ điều khiển chế độ xem của bạn. Trong trường hợp đơn giản nhất, bất kỳ bộ điều khiển xem nào được gán cho chi tiết splitVC có thể sẽ cần phải là đại biểu. Bạn có thể muốn dựa vào tất cả chúng trên một lớp siêu phổ biến để xử lý logic ủy quyền của trình điều khiển chia tách chế độ xem chia sẻ.

+0

Rất cám ơn Chris, lời giải thích tốt đẹp. –

+0

Đã lưu lại ngày của tôi. –

+0

Điều đó thực sự đã giúp tôi! – Fogh