如何在我想要的时候显示/隐藏UIImageView

时间:2011-01-31 14:48:56

标签: iphone objective-c cocoa-touch

我正在开发的iPhone应用程序有点问题。 当用户触摸按钮时,它会调用一个名为refreshQuestion的IBAction,它应该显示一个图像悬停在屏幕上以要求用户稍等片刻,然后它必须调用另一个函数,最后它必须隐藏图像。

问题是图像不会出现。以及网络活动指标。

任何帮助?

以下是代码:

- (IBAction)refreshQuestion:(id)sender{
pleaseWait.hidden = NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;    
[self loadData];
pleaseWait.hidden = YES;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

}

编辑: 这是我的LoadData函数:

- (void)loadData{   
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString * idUtilisateur = [userDefaults objectForKey:@"idUtilisateur"];

NSString * stringUrlQuestion = [NSString stringWithFormat:@"http://www.mywebsiteURL"];

NSURL * urlQuestion = [NSURL URLWithString:stringUrlQuestion];
QuestionParser * parser = [[QuestionParser alloc] init];
[parser parseXMLAtURL:urlQuestion parseError:nil] ;
int nbQuestions = [parser.arrayOfQuestion count];
[parser release];

NSFetchRequest *requete = [[NSFetchRequest alloc] init];
NSEntityDescription *entite = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:self.managedObjectContext];
[requete setEntity:entite];

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"idQuestion" ascending:YES];
NSArray * sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[requete setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];

NSError * error;
NSMutableArray *mutableFetchResult = [[self.managedObjectContext executeFetchRequest:requete error:&error] mutableCopy];
[requete release];
if(mutableFetchResult == nil){
    NSLog(@"Erreur viewWillAppear : %@", error);
}

questionDuJour = [mutableFetchResult objectAtIndex:0];

if (nbQuestions == 0){
    UIAlertView* alertViewConnection = [[UIAlertView  alloc] initWithTitle:@"Error" message:@"Error while retreiving data" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertViewConnection show];
    [alertViewConnection release];
}


NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"EEEE d MMMM"];
NSLocale * localisation = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease]; 
[outputFormatter setLocale:localisation];

labelJour.text = [NSString stringWithFormat:@"%@",[outputFormatter stringFromDate:questionDuJour.dateQuestion]];
textQuestion.text = questionDuJour.textQuestion;
citation.text = [NSString stringWithFormat:@"%@",questionDuJour.citation];
labelAuteur.text = [NSString stringWithFormat:@"%@",questionDuJour.auteur];

[outputFormatter release];
NSLog(@"stop animating");

}

2 个答案:

答案 0 :(得分:0)

我认为您的代码[self loadData]会在几微秒内执行。

单独使用此代码进行检查,

pleaseWait.hidden = NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;    

修改

检查一下,如果仍然遇到同样的问题,请检查是否已分配IBoutlet。因为你正在做的是正确的方法。

答案 1 :(得分:0)

听起来一切都在UI线程上执行。发布你的loadData方法,这样我们就可以看到它在做什么。您可能需要将此方法转换为使用将立即返回并允许UI线程继续的异步技术之一。然后,您可以检测何时完成加载数据并再次更改图像的可见性。