私はこのコードを持っていますが、なぜこれをメインスレッドで実行する必要があるのか理解できません。 これをバックグラウンドで実行すると、投稿要求は行われません。バグですか? この問題を解決するにはどうすればよいですか?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;
}
これは私の呼び出しです:関数への非同期NSURLConnection
ためには
-(void)segnaLettura:(MWFeedItem *)item{
[reader setRead:item];
}
- (void) segnaread:(MWFeedItem *)item{
[self performSelectorOnMainThread:@selector(segnaLettura:) withObject:item waitUntilDone:NO];
}
私はsegnareadを使用して、私のアイテムをGoogleReaderで読み取ったものとしてマークします。接続が遅い場合、GUIが数秒間フリーズします!そういうわけで私は本当にバックグラウンドでそれを行う必要があります。私は、私のアプリケーションをフリーズしているメインスレッド上で実行するコード行は –
と思うネットワークに接続している場合、あなたのアプリケーションをフリーズしている、あなたはそれを間違っている。解決策は、バックグラウンドスレッドに移動するのではなく、同期してネットワークに接続している場所を把握することです。インストゥルメントはここで役立ちます。 Time Profilerのメインスレッドだけで、 "Sample All Thread States"を使用してください。これは、あなたが不明な場合にあなたがぶら下がっている場所を表示します。 –
ありがとう –