Цикл, пока у массива нет данных - PullRequest
0 голосов
/ 16 августа 2011

Мне нужно настроить какой-то цикл, который будет работать, пока в массиве не будет данных.Немного справочной информации: приложение обращается к серверу, получает некоторую информацию и помещает эту информацию в массив.Только когда эта информация заполняется в массиве, представление может быть изменено на следующее представление (потому что представление заполнено информацией из массива).

Как бы я создал этот цикл?В настоящее время я использую NSTimer, но он не подходит для моих нужд.

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 16 августа 2011

Когда вы говорите цикл до Я предполагаю, что вы действительно имеете в виду ждать до .

Прежде всего, если это ожидание должно быть сделано в главном потоке, просто забудьте оникогда не блокируйте основной поток.

Вместо цикла вы, вероятно, захотите использовать блокировку и дождаться выполнения условия.Для этого требуется общая блокировка между кодом, в котором вы ожидаете заполнения массива, и кодом, в котором вы заполняете массив.

Сначала создайте блокировку общего условия следующим образом:

typedef enum {
    MYConditionStateNoObjects,
    MYConditionStateHaveObjects
} MYConditionState;
...
sharedArray = [[NSMutableArray alloc] init];
sharedLock = [[NSConditionLock alloc] initWithCondition:MYConditionStateNoObjects];

Ваш метод, который заполняет массив, должен затем сделать:

0 голосов
/ 16 августа 2011

Если у меня возникла идея, вам нужно обработать момент, когда данные с сервера были добавлены в массив. Так почему же вы не хотите использовать функциональность KVO ? Это позволит вам добавить наблюдателя, который будет прослушивать изменения содержимого массива.

0 голосов
/ 16 августа 2011

Вы можете попробовать использовать следующие библиотеки: http://allseeing -i.com / ASIHTTPRequest / Как использовать и найти асинхронную часть

Асинхронный означает, что вы выиграли '• заблокировать основной поток и дождаться ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...