2011-04-28 3 views
3

Je viens d'écrire une application iOS pour tester l'UIAlertView. Quand je l'ai couru, le UIAlertView apparaît juste avec l'écran est devenu sombre d'abord sans UIAlertView, et "longtemps" plus tard, l'UIAlertView est apparu. Cela se produit à la fois sur simulateur et sur iPhone (IOS 4.2). Je ne sais pas pourquoi, s'il vous plaît aidez-moi, merci.UIAlertView apparaissant très lentement

Description: (Vous pouvez également télécharger le projet HERE)

C'est une application basée Voir très simple avec 3 classes: AppDelgate ViewControler et un TestOperation qui mettent en œuvre NSOperation; AppDelegate était juste celui produit par XCode; TestOperation.h:

#import <Foundation/Foundation.h> 

@protocol TestOperationDelegate 

- (void)didFinishTestOperaion; 

@end 


@interface TestOperation : NSOperation { 
    id <TestOperationDelegate> delegate; 
} 

@property (nonatomic, assign) id <TestOperationDelegate> delegate; 

@end 

TestOperation.m

#import "TestOperation.h" 


@implementation TestOperation 

@synthesize delegate; 

- (void)main { 
    [delegate didFinishTestOperaion]; 
} 

@end 

ViewContoller.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
    TestOperation *testOperation = [[TestOperation alloc] init]; 
    testOperation.delegate = self; 
    [queue addOperation:testOperation]; 
    [testOperation release]; 
} 

- (void)didFinishTestOperaion { 
    NSLog(@"start uialertview"); 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"Oops!" message:@"Here's the UIAlertView" 
          delegate:self cancelButtonTitle:@"Confirm" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
} 

// !! Résolu Utilisez performSelectorOnMainThread pour faire la course de l'interface utilisateur sur thread principal

+1

Veuillez poster votre solution en réponse ci-dessous et l'accepter dès que vous serez en mesure de le faire. – titaniumdecoy

Répondre

8

Résolu !! Utilisez performSelectorOnMainThread pour faire fonctionner l'interface utilisateur sur thread principal

[performSelectorOnMainThread alerte: @selector (show) withObject: waitUntilDone nulle: NO];

+1

Veuillez indiquer comment vous avez utilisé performSelectorOnMainThread. – rmp2150

1

Qu'est-ce que vous essayez de tester dans le UIAlertView? Si vous avez simplement appelé UIAlertView à partir de viewDidAppear: dans votre ViewController, UIAlertView est-il affiché rapidement comme prévu?

Je m'attends à ce que les problèmes que vous avez sont liés à la façon dont vous appelez le UIAlertView, et que le UIAlertView est affiché avant que le UIView contrôlé par votre ViewController soit apparu.

+0

J'ajoute un bouton à la vue et déplace la partie NSOperationQueue vers le bouton Touch up dans l'écouteur d'événement pour m'assurer que le viewController est apparu. Et quand j'appuie sur le bouton, l'UIAlertView se comporte toujours comme avant. Si je viens d'appeler le UIAlertView de viewDidLoad, il se comporte correctement. Donc je pense que c'est peut-être juste parce que j'utilise le délégué, mais je ne sais pas comment résoudre ce problème. – ultragtx

Questions connexes