アプリケーションを更新するために ASIHTTPRequest 関数を追加したグローバル NSObject クラスがあります。ViewController クラスに UIProgressView を設定しました。NSObject クラスは次のようになります。
+(void)updateAllWithCategory:(NSMutableArray *)categories{
for(NSMutableArray *item in categories) {
NSString *urlString = [NSString stringWithFormat:@"http://mywebsite.com/%@.xml", item];
NSURL *url = [[NSURL alloc]initWithString:urlString];
__block __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setShowAccurateProgress:YES];
[request setDownloadProgressDelegate:self];
[request setTimeOutSeconds:20];
[request setCompletionBlock:^{
//download all data and show alert
}];
[request setFailedBlock:^{
//display all errors
}];
[request startAsynchronous];
}}
float bytesReceived = 0;
float totalSize = 0;
float estimate = 0;
+(void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes {
bytesReceived = bytesReceived + (float)bytes;
float dlSize = (float)[request contentLength];
totalSize = totalSize + dlSize;
estimate = (bytesReceived / (totalSize * 1.0f) * 100);
//write estimate in plist with value estTime
}
次に、ビューコントローラーで、次のように上記の関数を使用します。
-(void)updateChecker {
//get estTime from plist
[GlobalClass updateAllWithCategory:myArray]
progressbar.hidden = NO;
[progressbar setProgress:estTime animated: YES];
progressbar.progress = estTime;
}
updateChecker は、viewDidLoad に設定された NSTimer を介して呼び出されます。setProgress:animated: も .progress も機能しませんでした。プログレスバーが少しも動かない。私の質問は、グローバル NSObject クラスから呼び出される ASIHTTPRequest の進行状況バーをどのように正確に実装するのですか?