2011-01-31 3 views
0

У меня возникла небольшая проблема с iPhone-приложением, которое я сейчас разрабатываю. Когда пользователь прикасается к кнопке, он вызывает IBAction с именем refreshQuestion, который должен показывать изображение, наводимое на экран, чтобы попросить пользователя подождать минуту, затем он должен вызвать другую функцию и, наконец, он должен скрыть изображение ,Как показать/скрыть UIImageView, когда я хочу

Проблема в том, что изображение не появится. А также индикатор сетевой активности.

Любая помощь?

Вот код:

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

}

EDIT: Вот моя 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"); 

}

ответ

0

Я думаю, что ваш код [self loadData] выполняется в микросекундах ,

Проверить, используя этот код в одиночку,

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

EDIT:

Проверьте это, если вы все равно получите тот же чек проблема ли вы назначили IBOutlet или нет. Потому что то, что вы делаете, является правильным способом.

+0

Я попробовал, и действительно, появляется мое изображение. Но он появляется ПОСЛЕ завершения функции loadData. И эта функция может занять несколько секунд. Похоже, что он ждет завершения моей функции loadData, прежде чем что-либо сделать на моем представлении. Есть ли способ заставить мое свойство .hidden «выполнить»? Как фиксация или что-то еще? – Madness64

+0

Используйте NSThread, тогда – KingofBliss

+0

Хорошо, но что я должен выполнить в потоке? Моя функция LoadData? – Madness64

0

Похоже, что все работает на тему пользовательского интерфейса. Отправьте свой метод loadData, чтобы мы могли видеть, что он делает. Скорее всего, вам нужно преобразовать этот метод, чтобы использовать один из асинхронных методов, который немедленно вернется и позволит продолжить поток пользовательского интерфейса. Затем вы можете обнаружить, когда он закончил загрузку данных и снова изменил видимость изображения.

+0

Хорошо, я отправляю свой метод loadData.Но можете ли вы объяснить мне, как сделать эту асинхронную технику? – Madness64

+0

Итак, я, наконец, справился с этой проблемой, вызвав функцию loadData в другом потоке, а затем обновив свой пользовательский интерфейс, вызвав другой метод методом performSelectorOnMainThread. Он отлично работает. – Madness64

Смежные вопросы