2012-05-10 7 views
2

Я отправил NSURLConnection запрос, что он работает нормально. Теперь я хочу обновить информацию, то есть повторно отправить NSURLConnection.Refresh, работая при вызове кнопки IBAction. Но не работает от NSThread метода. Как решить эту проблему. Здесь NSThread функция для запуска системного времени. Когда время равно 1:00 утра, я хочу обновить API. Но это не вызов делегата NSURLConnection.Делегат NSURLConnection не звонит, когда звонит из функции NSThread

Это 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 
} 

Выше код с функцией под названием «отображает» аргумент один экземпляр класса он имеет все детали места.

NSThread код функции:

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

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

    if(hrs==12&& [email protected]"pm") 

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

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

Над функции дисплея называется placedetails присвоенного но NSURLConnection делегата не вызываются.

+0

, пожалуйста, помогите мне ... я провел целый день. из функции кнопки API работает. но не работает в функции NSThread, вызываемой функцией – Madhubalan

+3

Для вызова методов делегатов вам необходимо подключить runloop к NSURLConnection. Поскольку вы создаете поток и не присоединяете NSURLConnection к RunLoop потока, методы делегирования соединения не будут запущены. – 0x8badf00d

ответ

4

Для вызова методов делегатов вам необходимо подключить runloop вашего потока к NSURLConnection. Поскольку вы создаете поток и не присоединяете NSURLConnection к RunLoop потока, методы делегирования соединения не будут запущены.

Вот пример:

- (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"); 
} 
Смежные вопросы