NSURLConnection Ошибка, когда я запускаю его в фоновом режиме .... как я могу исправить? - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть этот код, но я не могу понять, почему я должен запустить его в главном потоке.Если я запускаю это в фоновом режиме, он не выполняет запрос на публикацию.Это ошибка?Как я могу решить эту проблему?

- (void)setRead:(MWFeedItem *)entry
{    [self getToken:YES];

    NSString *url=[NSString stringWithFormat:@"https://www.google.com/reader/api/0/edit-tag?a=user/-/state/com.google/read&i=%@&T=%@", entry.identifier, token];

    [self postRequestWithURLState:url];

}
- (void)postRequestWithURLState:(NSString *)url
{
    NSString *bodyRequest = nil;
    NSURL *requestURL = [NSURL URLWithString:url];
    NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc] init];

    //NSLog(@"-------------- bodyRequest: %@", bodyRequest);



    [theRequest setURL:requestURL];
    [theRequest setTimeoutInterval:0.5];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody:[bodyRequest dataUsingEncoding:NSASCIIStringEncoding]];
    [self.oauthAuthentication authorizeRequest:theRequest];
    [NSURLConnection connectionWithRequest:theRequest delegate:self];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;



}

это мой звонок:

-(void)segnaLettura:(MWFeedItem *)item{

        [reader setRead:item];

}
- (void) segnaread:(MWFeedItem *)item{
    [self performSelectorOnMainThread:@selector(segnaLettura:) withObject:item waitUntilDone:NO];
}

1 Ответ

1 голос
/ 25 февраля 2012

Для функционирования асинхронного NSURLConnection требуется обработка цикла выполнения потока. В то время как новые потоки автоматически получают цикл запуска, вы можете его запустить.

Вы можете узнать, как это сделать, в Руководство по программированию потоков , и я могу объяснить это подробнее, но в большинстве случаев это не то, что вам нужно. Большую часть времени в iOS фоновые потоки должны управляться с NSOperation или GCD. Как правило, если вы создаете поток вручную на iOS 4+, вы делаете это неправильно. Есть исключения, но не часто.

Первый вопрос здесь должен звучать так: «Почему у меня даже есть фоновая ветка для этого?»

Если вам действительно нужен фоновый поток, то способ, которым вы делаете segnaread, вероятно, подойдет.

...