Проблема в том, что у вас есть синхронный метод (тот, который хочет немедленно вернуть значение), который должен возвращать значение, полученное из асинхронного метода (тот, который работает в другом потоке).
Существует несколько способов исправить это:
дождаться завершения метода countObjectsInBackgroundWithBlock: используйте шаблон __block
, как описано @simonpie.
замените return number;
вызовом чего-либо, заинтересованного в полученном номере.Это также означает, что queryForKey:view:countView:
, скорее всего, вернет void
.
Последнее является предпочтительным решением, поскольку оно не будет блокировать поток, вызывающий метод queryForKey:...
.
Обратите внимание, что вы не можете перезаписывать классы UIKit ни на чем, кроме основного потока.Если этот блок выполняется в фоновом потоке, то выполнение того, что вы делаете в этом блоке, недопустимо.