2

NSURLConnection正常に動作しているリクエストを送信しました。NSURLConnection.Refreshここで、ボタンの IBAction から呼び出したときに機能している情報を更新する、つまり再送信したいと考えています。しかし、NSThreadメソッドからは機能していません。この問題を解決するにはどうすればよいですか。NSThreadシステム時刻を実行するための関数です。時刻が午前 1:00 になったら、API を更新します。しかし、 のデリゲートとは呼ばれませんNSURLConnection

これは NSURLConnection コードです:

-(void)displays:(model *)place
{
  NSString *strs=[@"http://www.earthtools.org/timezone-1.1/" stringByAppendingString:[NSString stringWithFormat:@"%@/%@",place.latitude,place.longitude]];

  NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:strs]];

  NSURLConnection *reqTimeZone=[NSURLConnection connectionWithRequest:request delegate:self];
  [reqTimeZone start]; //here request not get start
}

上記のコードは、「displays」という関数内にあり、引数はすべての場所の詳細を持つクラスの 1 つのインスタンスです。

NSthread 関数コード:

- (void) setTimer {    
   //assign current time
    [self countDown];
}

- (void) countDown {
   //count the current time 

   if(hrs==12&& meridian==@"pm")

    [self display:(placedetails)];//it calls the displays function but NSURLConnection is not get start.

    [NSThread detachNewThreadSelector:@selector(setTimer) toTarget:self withObject:nil];
}

上記の表示関数は、placedetails 割り当てと呼ばれますが、NSURLConnectiondelegate は呼び出されません。

4

1 に答える 1

4

デリゲート メソッドを呼び出すには、スレッドの実行ループを NSURLConnection にアタッチする必要があります。スレッドを作成していて、スレッドの RunLoop に NSURLConnection をアタッチしていないため、接続デリゲート メソッドは起動されません。

次に例を示します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    // I am creating a button and adding it to viewController's view
    UIButton *bttn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [bttn setFrame:CGRectMake(100.0f, 200.0f, 120.0f, 50.0f)];
    [bttn setTitle:@"Download" forState:UIControlStateNormal];
    [bttn addTarget:self action:@selector(spawnThreadForDownload) forControlEvents:UIControlEventTouchUpInside];

    [[self view] addSubview:bttn];
}

- (void)spawnThreadForDownload
{
    [NSThread detachNewThreadSelector:@selector(downloadAndParse) toTarget:self withObject:nil];
}

- (void)downloadAndParse
{
    @autoreleasepool {
        NSURL *url = [NSURL URLWithString:@"http://apple.com"];
        NSURLRequest *req = [NSURLRequest requestWithURL:url 
                                             cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                                         timeoutInterval:20.0f];
        NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

        // Run the currentRunLoop of your thread (Every thread comes with its own RunLoop)
        [[NSRunLoop currentRunLoop] run];

        // Schedule your connection to run on threads runLoop.
        [conn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    }
}

// NSURLConnectionDelegate methods

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Connection failed with error: %@",[error localizedDescription]);
}

// NSURLConnectionDataDelegate methods

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Connection finished downloading");
}
于 2012-08-08T17:58:42.647 に答える