我在后台运行它时NSURLConnection Bug ....我该如何解决?

时间:2012-02-25 15:33:37

标签: iphone objective-c ios nsurlconnection

我有这段代码,但我无法理解为什么我必须在主线程上运行它。 如果我在后台运行它不执行发布请求。这是一个错误吗? 我该如何解决这个问题?

- (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 个答案:

答案 0 :(得分:1)

为了使异步NSURLConnection起作用,它需要处理线程的runloop。当新线程自动获得runloop时,由你来运行它。

你可以在Threading Programming Guide中学习如何做到这一点,我可以解释一下,但大多数时候这不是你想要的。大多数情况下,在iOS中,后台线程应该使用NSOperation或GCD进行管理。通常,如果您在iOS 4+上手动生成线程,那么您做错了。有例外,但不经常。

这里的第一个问题应该是“我为什么还要有一个后台线程?”

如果你真的需要一个后台线程,那么你所做的segnaread的方式可能就好了。