UIAlertView появляется очень медленно - PullRequest
3 голосов
/ 28 апреля 2011

Я только что написал приложение для iOS, чтобы протестировать UIAlertView.Когда я его запустил, UIAlertView, который только появился, с экраном сначала потемнел без UIAlertView, а спустя «долгое время» появился UIAlertView.Это происходит как на симуляторе, так и на iPhone (IOS 4.2).Я не знаю почему, пожалуйста, помогите мне, спасибо.

Описание: (Вы также можете загрузить Project ЗДЕСЬ )

Это очень простое приложение на основе View с 3 классами: AppDelgate ViewControler и TestOperation, которые реализуют NSOperation;AppDelegate был только тем, который был создан 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];
}

// Решено!!Используйте executeSelectorOnMainThread, чтобы пользовательский интерфейс работал в главном потоке

Ответы [ 2 ]

8 голосов
/ 24 июля 2011

решаемые !! Используйте performSelectorOnMainThread, чтобы пользовательский интерфейс работал в главном потоке

[alert executeSelectorOnMainThread: @selector (show) withObject: nil waitUntilDone: NO];

1 голос
/ 28 апреля 2011

Что вы пытаетесь проверить в UIAlertView?Если вы просто вызвали UIAlertView из viewDidAppear: в вашем ViewController UIAlertView отображается быстро, как ожидалось?

Я ожидаю, что проблемы, которые у вас возникают, связаны с тем, как вы вызываете UIAlertView, и что UIAlertViewотображается до того, как появился UIView, управляемый вашим ViewController.

...