• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - 从 NSThread 的函数调用时不调用 NSURLConnection 委托(delegate)

[复制链接]
菜鸟教程小白 发表于 2022-12-12 20:47:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我发送 NSURLConnection 请求它工作正常。现在我想刷新信息,即从按钮的 IBAction 调用时重新发送 NSURLConnection.Refresh 正在工作。但不适用于 NSThread 方法。我该如何解决这个问题。这里的NSThread 函数用于运行系统时间。当时间等于凌晨 1:00 时,我想刷新 API。但它不是调用 NSURLConnection 的委托(delegate)。

这是 NSURLConnection 代码:

-(void)displaysmodel *)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”的函数,参数是一个类的实例,它具有所有位置详细信息。

NSthread函数代码:

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

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

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

    [self displayplacedetails)];//it calls the displays function but NSURLConnection is not get start.

    [NSThread detachNewThreadSelectorselector(setTimer) toTarget:self withObject:nil];
}

上面的显示函数被称为placedetails分配但NSURLConnection委托(delegate)没有被调用。



Best Answer-推荐答案


对于要调用的委托(delegate)方法,您需要将线程的运行循环附加到 NSURLConnection。由于您正在创建一个线程并且没有将 NSURLConnection 附加到线程的 RunLoop,因此不会触发连接委托(delegate)方法。

这是一个例子:

- (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 actionselector(spawnThreadForDownload) forControlEvents:UIControlEventTouchUpInside];

    [[self view] addSubview:bttn];
}

- (void)spawnThreadForDownload
{
    [NSThread detachNewThreadSelectorselector(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)connectionNSURLConnection *)connection didFailWithErrorNSError *)error
{
    NSLog(@"Connection failed with error: %@",[error localizedDescription]);
}

// NSURLConnectionDataDelegate methods

- (void)connectionNSURLConnection *)connection didReceiveResponseNSURLResponse *)response
{

}

- (void)connectionNSURLConnection *)connection didReceiveDataNSData *)data
{

}

- (void)connectionDidFinishLoadingNSURLConnection *)connection
{
    NSLog(@"Connection finished downloading");
}

关于iphone - 从 NSThread 的函数调用时不调用 NSURLConnection 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10537038/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap