iPhone UIBarButtonItem setEnabled в NSThread - PullRequest
       11

iPhone UIBarButtonItem setEnabled в NSThread

0 голосов
/ 06 августа 2010

Я пытаюсь изменить свойство enabled UIBarButtonItem после выполнения некоторых действий в NSThread. Нажав кнопку, я установил для параметра «Разрешено» значение «НЕТ», затем выполнил резьбовую часть, и в конце я попытался снова активировать кнопку. Довольно простой.

Почему-то это не получается, однако я могу корректно изменить любое другое свойство UIBarButtonItem (например, заголовок).

Что я здесь не так делаю?

@interface myViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
    IBOutlet UIBarButtonItem *myButton;

}
@property (nonatomic, retain) IBOutlet UIBarButtonItem *myButton;

- (IBAction)mysub:(id)sender;

@end



@implementation myViewController

@synthesize myButton;

- (IBAction)mysub:(id)sender {
 [myButton setEnabled:NO];

    [NSThread detachNewThreadSelector:@selector(mysub_threaded) toTarget:self withObject:nil];    
}

- (void) mysub_threaded {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    … do threaded stuff

    [myButton performSelectorInBackground: @ selector(setEnabled :) withObject: [NSNumber numberWithBool:YES]];

    [pool drain];
}

1 Ответ

2 голосов
/ 06 августа 2010

Вместо этого вы хотите performSelectorOnMainThread.

[myButton performSelectorOnMainThread:@selector(setEnabled:)
                           withObject:[NSNumber numberWithBool:YES]
                        waitUntilDone:NO];

Всегда делайте все, что касается пользовательского интерфейса в главном потоке.

Но иногда передача таких аргументов также является прикольной.Я считаю, что лучше всего обернуть все, что вам нужно сделать, в другой метод

- (void)mysub_complete {
  [myButton setEnabled:YES];
}

Затем вызвать , что с

[self performSelectorOnMainThread:@selector(mysub_complete)
                       withObject:nil
                    waitUntilDone:NO];

Теперь вы можете сделать столько же другого интерфейсавещи, как вы хотите, не беспокойтесь об этом.

...