私が構築するアプリケーションでは、NSPersistentDocument の TerminalController サブクラスを作成しました。TerminalController には、メイン ウィンドウ nib のプログレス インジケーターのインスタンスに接続された NSProgressIndicator のアウトレットがあります。サーバーからのデータのアップロードまたはダウンロードの過程でさまざまなクラスをすべて使用する必要があるため、決定的な進行状況を提供する進行状況インジケーターは TerminalController クラスに配置されます。
特に、画像のアップロードに頻繁に使用されるクラスが 1 つあります。ImageUploader は、メイン ウィンドウ nib に配置され、TerminalController に接続された進行状況インジケーターをトリガーすることを想定しています。
私の問題は、ImageUploader から TerminalController の進行状況インジケーターにアクセスする方法がわからないことです。ImageUploader はコード内で頻繁に初期化およびリリースされるため、メイン ウィンドウ nib で ImageUploader のインスタンスを作成してそこに接続することはできません。
私が考える任意のオブジェクトからアクセスする方法が必要です。私のアイデアの 1 つは、進行状況インジケーターのグローバル インスタンスを作成することでしたが、構造の観点からは間違っており、お勧めできません。
この問題に関する提案をいただければ幸いです
ここに私のコードのサンプルがあります
NSPersistentDocument の TerminalController サブクラス
@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];
}