Когда вам нужно работать с сетью, проверенный подход заключается в использовании асинхронных вызовов.Это из-за природы сетевого соединения;это непредсказуемо, не всегда надежно, время, которое вам нужно потратить, чтобы получить результат от сервера, может варьироваться от миллисекунды до минут.
Я бы сделал класс модели данных MyPDFModel с асинхронным методом, которыйдолжен запустить поток, чтобы получить файл с сервера:
- (void)requestPDFWithURL:(NSURL*)fileURL
{
[NSThread detachNewThreadSelector:@selector(requestPDFWithURLThreaded:) toTarget:self fileURL];
}
- (void)requestPDFWithURLThreaded:(NSURL*)fileURL
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
// do whatever you need to get either the file or an error
if (isTheFileValid)
[_delegate performSelectorOnMainThread:@selector(requestDidGetPDF:) withObject:PDFFile waitUntilDone:NO];
else
[_delegate performSelectorOnMainThread:@selector(requestDidFailWithError:) withObject:error waitUntilDone:NO];
[pool release];
}
Между тем в пользовательском интерфейсе должен отображаться индикатор активности.
Протокол MyPDFModelDelegate должен иметь два метода:
- (void)requestDidGetPDF:(YourPDFWrapperClass*)PDFDocument;
- (void)requestDidFailWithError:(NSError*)error;
YourPDFWrapperClass
используется для возврата автоматически выпущенного документа.
Делегат может сообщить пользовательскому интерфейсу, что данные были обновлены, например, отправив уведомление, если делегат является частью модели данных.,
Это всего лишь пример, реализация может отличаться в зависимости от ваших потребностей, но я думаю, вы поймете эту идею.
PS Задержка инициализации - очень плохая идея.