2013-03-06 3 views
0

У меня следующий код в моем приложении IOS:Неправильный порядок выполнения в объектный код C

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [self performSelector: @selector(generateDataForDates:) withObject:paramArray afterDelay:0.1]; 
}); 

return self.dataArray; 

App выполняет оператор возврата первой, а затем над «performselector», которая является причиной несогласованности данных. У кого-нибудь есть ключ? Мне нужно выполнить executeselector сначала, а затем вернуть оператор.

ответ

0

performSelector:withObject:afterDelay: будет планировать селектор, который будет выполняться после задержки, и не будет ждать, пока селектор не будет выполнен. Он немедленно вернется.

Это будет работать, но зачем вы даже отправляете этот блок?

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [self generateDataForDates:paramArray]; 
}); 

return self.dataArray; 
+0

networkActivityIndicator не будет отображаться в новом представлении, если задержка равна нулю. Это единственная причина для использования задержки в performselector. – user2139064

+0

Вы не можете сделать это с ожиданием завершения 'generateDataForDates:' в том же методе. После задержки вы вызовете дополнительный метод, который будет выполнять «generateDataForDates» и обрабатывать данные по завершении. – rckoenes

+0

Это ничего не меняет. На самом деле проблема связана с какой-то библиотекой, которую мы используем, - она ​​вынуждает событие выполнить оператор возврата сначала, а затем вызвать параметр performselector. Поэтому я спрашивал, можно ли что-то сделать, чтобы performselector был первым оператором, который должен выполняться, а затем возвращать оператор. – user2139064