2012-10-26 37 views
5

Đây là thiết kế ứng dụng của tôi. Tôi có mainController trình bày secondViewController. Bây giờ, tôi muốn bỏ secondViewController và sau đó gọi phương thức aMethod trên mainController như vậy:dismissViewControllerPhương thức hoàn thành không hoạt động

[self dismissViewControllerAnimated:YES completion:aMethod]; 

Nhưng điều này mang lại cho tôi những lỗi use of undeclared identifier 'aMethod'

Rõ ràng tôi không sử dụng bộ xử lý hoàn thành một cách chính xác, nhưng tôi không thể hình một cách chính xác.

Trả lời

12

Tôi nghĩ rằng đây những gì bạn đang tìm kiếm,

[self dismissViewControllerAnimated:YES completion:^{ 
      [self.mainController aMethod]; 
     }]; 

Trong đoạn mã trên bạn cần phải khai báo self ngoài khối và sử dụng nó như là,

__block SecondViewController *object = self; 

[self dismissViewControllerAnimated:YES completion:^{ 
       [object.mainController aMethod]; 
      }]; 

Chỉ cần tránh giữ lại self được giữ lại trong khối.

Cập nhật:

Got vấn đề bây giờ. Bạn cần khai báo mainController làm tài sản trong tệp .h của bạn là secondViewController. Sau đó khi bạn đang trình bày các secondViewController từ maincontroller, bạn cần phải thiết lập nó như là,

secondViewController.maincontroller = self; 
[self presentViewController:secondViewController animated:YES completion:Nil]; 

Trong file SecondViewController.h của bạn,

@property(nonatomic, assign) MainController *mainController; 

Trong file SecondViewController.m của bạn,

@synthesis mainController; 

Cập nhật 2:

Nếu bạn không muốn khai báo maincontroller làm tài sản, hãy thử điều này. Tôi không chắc đây có phải là cách đúng đắn hay không. Nhưng có vẻ như nó đã từng hoạt động.

MainController *mainController = (MainController *)[self.view.superview nextResponder]; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 

Cập nhật 3 (đề nghị):

này nên làm việc cho bạn. Kiểm tra nó.

MainController *mainController = (MainController *)self.parentViewController; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 
+0

Vâng ig im làm '__block YouViewController * object = self' tôi không thể thiết lập đối tượng là viewController đang bị loại bỏ? Không phải là người được trình bày? –

+0

Oh ok vừa xem bản cập nhật của bạn. đối tượng không có mainController, nó không biết nó là gì .. –

+0

Bây giờ bạn có thể kiểm tra và cho tôi biết nếu điều này có hiệu quả không? – iDev

-3

Tuyên bố điều này: dismissViewControllerAnimated:YES completion:Nil

Tôi hy vọng điều đó sẽ hữu ích.

+0

Không có điều đó không hữu ích. Im đang cố gắng gọi một phương thức trên viewController mà sẽ được hiển thị khi một hiện tại bị loại bỏ ... do đó việc sử dụng của tôi hoàn thành –

1

Bạn muốn một cái gì đó như:

[self dismissViewControllerAnimated:YES completion:^{ 
      ... 
      <do something on completion here> 
      ... 
     }]; 
+0

cùng một lỗi ... bộ điều khiển nào nhận được phương thức hoàn thành? –

+0

aMethod là gì? – EarlyRiser

+0

nó là một phương thức được khai báo trong 'mainController' là bộ điều khiển đang được hiển thị khi gọi hàm disviewviewcontrolleranimated –

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