2012-06-28 1 views
0

В приложении, которое я создаю, я создал подкласс TerminalController для NSPersistentDocument. В TerminalController есть выход NSProgressIndicator, который подключен к экземпляру индикатора прогресса в главном окне. Индикатор прогресса, который будет обеспечивать определенный прогресс, помещается в класс TerminalController, потому что я хочу, чтобы все мои различные классы использовали при загрузке или загрузке данных с сервера.Доступ к NSProgressIndicator, расположенный в NSPsistentDocument из другого класса

Существует особенно один класс, который часто используется для загрузки изображений - ImageUploader - предположительно, чтобы запускать индикатор прогресса, расположенный в главном окне, и подключаться к TerminalController.

Моя проблема: я не могу понять, как получить доступ к индикатору прогресса в TerminalController из ImageUploader. Я не могу создать экземпляр ImageUploader в главном окне nib и подключиться там, поскольку ImageUploader часто инициализируется и освобождается в коде.

Должен быть способ доступа с любого объекта, о котором я думаю. Одна из моих идей заключалась в том, чтобы сделать индикатор прогресса индикатора глобальным, но я знаю, что с точки зрения структуры неправильно и не рекомендуется.

Я бы очень признателен за любые предложения по этому вопросу

Вот пример моего кода

TerminalController подкласс NSPersistentDocument

@interface TerminalController : NSPersistentDocument{ 
    IBOutlet NSProgressIndicator *loadingIndicator; 
} 
@property (retain, nonatomic) NSProgressIndicator *loadingIndicator; 

@implementation TerminalController 

@synthesize loadingIndicator; 

- (void)dealloc 
{ 
    [loadingIndicator release]; 
    [super dealloc]; 
} 

ImageUploader класс

@interface ImageUploader : NSObject{ 
    ... 

    NSProgressIndicator *progressIndictor; // This is progress indicator that should point to TerminalController progress indicator 
} 

@implementation CustomXMLRequests 

- (void) uploadImage:(NSURL *)withUrl{ 
    ... 

    // How to point to progress indicator that is located in TerminalController that is subclass of NSPersistentDocument 
    [progressIndictor setUsesThreadedAnimation:YES]; 
    [progressIndictor startAnimation:self]; 
    [progressIndictor setMinValue:0.0]; 
    [progressIndictor setMaxValue:1.0]; 
} 

- (void)connection:(NSURLConnection *)connection 
    didSendBodyData:(NSInteger)bytesWritten 
totalBytesWritten:(NSInteger)totalBytesWritten 
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{ 
    double prgrs = (double)totalBytesWritten/totalBytesExpectedToWrite; 
    [progressIndictor setDoubleValue:prgrs]; 
    [progressIndictor displayIfNeeded]; 
} 

ответ

1

Если у вас не может сделать прямой XIB-контакт (через IBOutlet от одного контроллера просмотра до другого), ваш лучший лучший вариант - либо use "NSNotifications" to pass along a message заинтересованным наблюдателям (т. от вашего ImageUploader до вашего TerminalController), или вы можете каким-либо образом зарегистрировать свой TerminalController в качестве делегата для вашего ImageUploader, а затем обновить индикатор прогресса.

+0

Спасибо за отзыв. Я использовал NSNotifications. Он отлично работает – sumofighter666