0

ViewController で ASINetWorkQueue を使用します。そのため、キューの実行中に MBProgressHUD を表示したいと考えています。

- (void) addItemsToEndOfTableView{
NSLog(@"add items");
[[self networkQueue] cancelAllOperations];

// Création d'une nouvelle file (queue) de requetes
[self setNetworkQueue:[ASINetworkQueue queue]];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)];
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)];

...add requests

HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.dimBackground = YES;
HUD.delegate = self;

[HUD showWhileExecuting:@selector(stopHub) onTarget:self withObject:nil animated:YES];
}
[[self networkQueue] go];

そのため、queueFinished が呼び出されたときに、hud を停止したい:

- (void)queueFinished:(ASINetworkQueue *)queue
{
    [self stophud];
}

-(void)stophud
{
    [MBProgressHUD hideHUDForView:self.view animated:YES];
}

しかし実際には、進行状況の Hud はすぐに消えますが、データが収集されている間、iPhone のトップ バーのアクティビティ インジケーターが実行されます。

それで、何が問題なのですか?

4

1 に答える 1

0

MBprogressHUDAPIから

/** 
 * Shows the HUD while a background task is executing in a new thread, then hides the HUD.
 *
 * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a
 * pool.
 *
 * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread.
 * @param target The object that the target method belongs to.
 * @param object An optional object to be passed to the method.
 * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use
 * animations while (dis)appearing.
 */
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;

このメソッドを使用しているためstophud、新しいスレッドで実行されます。これは、あなたが持っている奇妙な問題を引き起こす可能性があります (私は思います)。

それを使用する代わりに、使用してみてください

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
// set the properties here...

キューを開始した後にそれを表示し、

[MBProgressHUD hideHUDForView:self.view animated:YES];

キューが終了したときに非表示にします。

それが役に立てば幸い。

于 2012-06-12T12:43:26.227 に答える