iPhone загрузить в новой теме - PullRequest
2 голосов
/ 16 сентября 2010

Я пытался реализовать фоновую нить в своем приложении, чтобы выполнять длительную загрузку с использованием трансплантата.

Я использую FBConnect SDK, и он работает отлично, но я хотел быдля обеспечения бесперебойной работы графического интерфейса, и в настоящий момент в приложении имеется заметная пауза перед началом загрузки.

В настоящий момент происходит добавление задания загрузки в очередь, а затем запуск «startQueue».".

Это берет первое задание из очереди, изменяет размер изображения и начинает загрузку до Facebook.

Это только в тот момент, когда выполняется запрос URL, он запускаетсяработает в своем собственном потоке, и я возвращаю контроль над графическим интерфейсом.

Мне бы хотелось иметь возможность добавить задание в очередь, а затем запустить "startQueue" в отдельном потоке.Это немедленно вернуло бы мне контроль над графическим интерфейсом.

Происходит следующее: я сразу возвращаю графический интерфейс и размер изображения изменяется в новой теме), и начинается загрузка в Facebook (также в новой теме).) но тогда ничего.

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

метод init создает поток ...

bgThread = [[NSThread alloc] initWithTarget:self selector:@selector(startQueue) object:nil];

Затем метод добавления задания запускает его ...

[bgThread start];

, затем он работает так ...

-(void)startQueue
{
    running = TRUE;

    bgPool = [[NSAutoreleasePool alloc] init];

    [self startJob];
}

-(void)startJob
{
    NSDictionary *currentJob = [NSDictionary dictionaryWithDictionary:[jobQueue objectAtIndex:0]];
    NSArray *networks = [currentJob objectForKey:@"networks"];

    NSLog(@"Resizing image");

    NSLog(@"Starting Uploads");

    for (int i = 0; i < [networks count]; i++)
    {
        NSString *networkName = [networks objectAtIndex:i];

        if ([networkName isEqualToString:@"Facebook"])
        {
            NSLog(@"Facebook");
            currentUploads += 1;
            [self.fbDelegate uploadPhoto:uploadImage withCaption:[currentJob objectForKey:@"caption"]];
        }
    }
}

Без использования потока (т.е.просто запускаю startJob) все работает отлично.Когда я вызываю bgThread start, он работает отлично, и я получаю NSLog на Facebook, но работа никогда не заканчивается.Это даже не заканчивается с ошибкой.

Спасибо за любые указатели или советы, которые вы можете предоставить!

Оливер

...