Загрузите UIImagePickerController в фоновом режиме - PullRequest
1 голос
/ 01 апреля 2011

Когда мое приложение запускается, я хотел бы инициализировать UIImagePickerController.Поскольку это может занять несколько секунд, я хотел бы сделать это в фоновом режиме.Каков наилучший способ обеспечить выполнение фоновой задачи перед вызовом средства выбора?

В настоящее время у меня есть следующий код.Это работает, но он вылетит, если кто-то вызовет средство выбора до того, как будет выполнена фоновая задача.Редактировать: Оказывается, наш этот вопрос несколько теоретический.Вычисление [[UIImagePickerController alloc] init] занимает только время в режиме отладки на устройстве .Таким образом, для производственного кода нет необходимости запускать что-либо в фоновом режиме.Кроме того, [[UIImagePickerController alloc] init], кажется, блокирует основной поток, поэтому даже в режиме отладки нет никакого преимущества размещать его в фоновом потоке.

Ответы [ 3 ]

3 голосов
/ 02 апреля 2011

Может быть, простой флаг может сделать эту работу?

@interface MyViewController : UIViewController
{
     BOOL _pickerIsLoaded;
}
@end

@implementation MyViewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    _pickerIsLoaded = NO;
    [self performSelectorInBackground:@selector(initPicker) withObject:nil];
}

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

      NSLog(@"picker start... ");
      [self setPicker: [[UIImagePickerController alloc] init]];
      NSLog(@"picker done.");

      _pickerIsLoaded = YES;

      [pool release];

} 

@end
1 голос
/ 02 апреля 2011

Я бы использовал NSConditionLock для сигнализации о том, что ваш контроллер загружен.В методе -initPicker я бы установил условие, когда UIImagePickerController заканчивает инициализацию.И в вашем IBAction для показа сборщика, я бы проверил это условие.Дополнительные параметры см. В Руководство по программированию потоков .

0 голосов
/ 02 апреля 2011

Можете ли вы подождать, пока ваш "сборщик завершен", а затем добавить вид сборщика в любой вид, который делает его видимым? Примерно так, сразу после вашей оценки "сделано":

   [self presentModalViewController: theImagePickerController]; // assuming self is a viewController.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...