2011-12-08 33 views
22

Có thể chạy khối hoàn thành trên luồng chính không?Làm cách nào tôi có thể truy lục giá trị trả về từ khối hoàn thành?

Ví dụ, tôi có một phương pháp mà trả về một giá trị:

- (int)test 
{ 

    /* here one method is called with completion block with return type void */ 

    [obj somemethodwithcompeltionblock: 
     { 
     /* here I am getting my Int which I want to return */ 
     } 
     ]; 
} 

nhưng tôi không thể nhìn thấy làm thế nào để trả về giá trị số nguyên từ bên trong khối hoàn thành là kết quả của phương pháp này, vì việc hoàn khối chạy trên một chuỗi nền.

Tôi làm cách nào để thực hiện việc này?

+0

Vậy ... không sử dụng một khối mà tạo ra một chủ đề mới. Đây có phải là khung hoặc khối thư viện mà bạn không thể sửa đổi không? – JoePasq

Trả lời

29

Bạn đang thiếu một số khái niệm cơ bản về phát triển không đồng bộ với các khối. Bạn không thể có một khối trả về được gửi đi từ bất kỳ đâu nhưng phạm vi của chính nó. Hãy suy nghĩ của từng khối là phương pháp riêng của nó, thay vì mã nội tuyến.

Tôi nghĩ rằng những gì bạn đang muốn tìm một cái gì đó tương tự như sau ...

- (void)testWithHandler:(void(^)(int result))handler 
{ 
    [obj somemethodwithcompeltionblock:^{ 
      int someInt = 10; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       handler(10); 
      }); 
     } 
     ]; 
} 


- (void)callSite 
{ 
    [self testWithHandler:^(int testResult){ 
     NSLog(@"Result was %d", testResult); 
    }]; 
} 
Các vấn đề liên quan