2013-04-24 4 views
0

Как можно дождаться завершения какого-либо метода, а затем продолжить работу?Метод внутри другого метода завершение wait

- (void)loadMoreDataOnBottomOfTableview 
{ 
NSLog(@"LOADING ITEMS ON BOTTOM"); 
[self refreshStream]; 

[self.mainTableView reloadData]; 

... 
} 

Так что мне нужно ждать метод refreshStream для завершения, а затем перезагрузить данные Tableview и остальные loadMoreDataOnBottomOfTableview (...).

+0

У вас есть решение? –

ответ

-1

Вы можете использовать performSelectorOnMainThread:withObject:waitUntilDone: следующим образом:

[self performSelectorOnMainThread:@selector(refreshStream) withObject:nil waitUntilDone:YES] 

[self.mainTableView reloadData]; 

Заметим, однако, что это не рекомендуется шаблон дизайна. Async вызовы должны использовать обратные вызовы (ваш метод refreshStream должен перезвонить метод в контроллере представления, который должен затем вызвать reloadData

1

Переопределить refreshStream

-(void)refreshStream:(void (^)(void))complete; 

-(void)loadMoreDataOnBottomOfTableview 
{ 
    [self refreshStream:^{ 
      [self.mainTableView reloadData]; 
    }]; 
} 

Это должно сделать вас право также проверить эту страницу, используя ЬурейиЙ это негласный стандарт.

http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html

0
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]; 

Вы можете вызвать свой метод, используя это.

0

Я могу ответить на ваш запрос быстро. Аналогично, вы можете использовать блок завершения в своем коде для достижения этой цели.

class TestClosure 
{ 

func calculateAdditionData() { 

    countNumbers({ (result) -> Void in 

     println("[self refreshStream] completed") 
     //[self.mainTableView reloadData]; 
    }) 
} 


func refreshStream(completion: (() -> Void)!) { 

    //Your refresh code 
    completion() 
} 

} 

Завершение блоков/Закрытие - это правильный способ подождать, чтобы что-то завершилось.