5

Tôi đang cố gắng để bỏ một bộ điều khiển xem như thế này:dismissViewControllerAnimated khối hoàn thành không được gọi

[composeViewController dismissViewControllerAnimated:YES completion:^{ 

    NSLog(@"Hello"); // Never outputted 
}]; 

Bộ điều khiển xem là bị sa thải, nhưng đối với một số lý do khối hoàn không bao giờ được gọi.

Tôi chưa bao giờ gặp bất kỳ sự cố nào với khối hoàn thành không được gọi với các bộ điều khiển chế độ xem khác. Tuy nhiên,

Bộ điều khiển chế độ xem này là "đặc biệt" vì nó được thêm dưới dạng bộ điều khiển chế độ xem con (mà trước đó tôi chưa làm việc với ứng dụng của mình). Điều này có áp đặt bất kỳ tác dụng phụ nào tại sao khối hoàn thành không được gọi?

Nó bổ sung như sau:

UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController; 
[rootVC addChildViewController:self]; 
[rootVC.view addSubview:self.view]; 
[self didMoveToParentViewController:rootVC]; 
+0

'addChildViewController: 'thực sự đẩy mà điều khiển xem vào menu ngăn xếp. Bạn phải bật nó ra trước khi khối đó có thể kích hoạt – CodaFi

+0

Tôi đã cố gắng thực hiện '[composeViewController removeFromParentViewController];' (tôi có thể thấy rằng nó bị xóa khỏi thuộc tính 'childViewControllers' của' rootViewController') trước khi gọi 'dismiss ...' nhưng hoàn thành khối vẫn không được gọi. –

+0

po ngăn xếp điều hướng, sau đó. – CodaFi

Trả lời

1

Tìm thấy ra những gì vấn đề là: thứ 3 xem bên điều khiển Tôi đã sử dụng đã ghi đè - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion mà không thực sự gọi completion()

0

Nếu bạn trình bày một phương thức, là bộ điều khiển điểm cho rằng nhận được thông báo (hoặc phía trên trong hệ thống phân cấp, tôi vẫn không nhận được rằng) để xử lý tất cả các quá trình này thêm con vc trao đổi xem vv Có vẻ như bạn đang làm một kết hợp của hai kỹ thuật. Chỉ cần sử dụng một.
Vì vậy, trình bày nó bằng cách sử dụng - (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion quảng cáo loại bỏ nó bằng cách sử dụng dismissViewController để cho bộ điều khiển xem quản lý mọi thứ.