0

私はこの問題を抱えていました、そして私はここでスタックオーバーフローと他のどこでも非常に多くの投稿を通り抜けました、そして解決策を見つけることができませんでした。メインスレッドでも実行しています。次のようにコーディングします。

@interface JsonViewController : UIViewController <UIActionSheetDelegate,UIWebViewDelegate,NSURLConnectionDelegate>
{
  ....
}
@implementation JsonViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    rssFeedDetailViewConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSLog(@"PRINTING RSS FEED %@", rssFeedDetailViewConnection);
[rssFeedDetailViewConnection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                                       forMode:NSDefaultRunLoopMode];
    [rssFeedDetailViewConnection start];
}


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"Hello");
responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
     NSLog(@"Hello");
    [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
     NSLog(@"Hello");
    [responseData release];
    [connection release];
// Show error message
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
 NSLog(@"Hello");
    // Use responseData
    [responseData release];
    [connection release];
 }

どんな助けでも大歓迎です。私はこれで2日間立ち往生しています。

4

2 に答える 2

1

次のステートメントは必要ありません。

[rssFeedDetailViewConnection scheduleInRunLoop:[NSRunLoop mainRunLoop]  forMode:NSDefaultRunLoopMode];
[rssFeedDetailViewConnection start];

を使用しているのでinitWithRequest:delegate:。この呼び出しはすでにデータのロードを開始しています。

これらの特定のステートメントを削除するとどうなりますか?

NSURLConnectionの詳細。

于 2012-08-21T11:17:37.563 に答える
0

終了と呼ばれるブール値を用意し、NSURLConnectionコードを記述した場所にこのコードを追加します。

 while(!finished) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

そしてあなたのconnectionDidFinishLoadingにこれを追加するだけです

 finished = TRUE; 

そしてそれはうまくいきます。それは私が理解している最善の解決策ではありませんが、機能します。

于 2012-08-21T15:46:49.773 に答える