2011-12-29 1 views
1

Я делаю приложение, в котором изображения от пользователя берутся вместе и сохраняются в NSMutableArray. Как только еще один образ был начинают приходить, мне нужно загружать изображения на сервер один на один though images are taken togetherКак мы можем использовать комбинацию NSThread и NSNotification?

Я использую [NSThread detachNewThreadSelector:@selector(uploading:) toTarget:self withObject:imagearray]; загружать изображения по одному. Мне нужно показать progressview для пользователя, когда изображения загружаются один за другим.

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

Или есть ли какой-либо другой сценарий, который полезен для этого больше, чем NSThread + NSNotification?

ответ

0

Я стараюсь использовать что-то похожее на парадигму делегата, но думать о потоках вместо объектов. Таким образом, загружающий поток делегирует в основном потоке, так как он позволяет изменять пользовательский интерфейс. Например, загрузка нить может отправлять сообщения прогресса

[self performSelectorOnMainThread:@selector(uploadProgression:) 
     withObject:foo waitUntilDone:NO] 

частичной загрузки или для каждой полной загрузки закончил

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo 
     waitUntilDone:YES] 

Я полагаю, что вы не остановить загрузку обновления частичного прогресса в progessView но вам нужно подождать, когда загрузка закончится, чтобы не дублировать загрузку потоков, запускающих новую загрузку. не

+0

да я звоню '[самоуправления performSelectorOnMainThread: @selector (uploadProgression :) withObject: Foo waitUntilDone: NO] ' только один раз и каждый раз, когда этот селектор заканчивается он должен вызвать '[само performSelectorOnMainThread: @selector (uploadDidEnd:) withObject: foo waitUntilDone: YES] 'и снова он должен вернуться к' uploadProgtession' с продолжением arraicount – Heena

0

Вы должны использовать оповещения в случае, если вы не знаете, сколько слушателей оно есть, и вы просто публикуете уведомление о чем-то. В вашем случае у вас, вероятно, есть только один контроллер представлений, поэтому нет необходимости использовать уведомления, поэтому просто создайте некоторый протокол для делегата и реализуйте его в своем контроллере вида. Если вам необходимо обновить свой пользовательский интерфейс, вам также следует вызвать все методы делегата, используя performSelectorOnMainThread.

 Смежные вопросы

  • Нет связанных вопросов^_^