1

我正在做一个应用程序。我正在使用 CLLocationManager 类来获取更新的位置纬度和经度详细信息。但我需要在单独的线程中使用这个 CLLocationManager。我编写了如下代码。

- (void)viewDidLoad
{
 [NSThread detachNewThreadSelector:@selector(fetch) toTarget:self withObject:nil];
}
-(void)fetch
 {
    manager=[[CLLocationManager alloc]init];
    manager.delegate=self;
    manager.distanceFilter=kCLDistanceFilterNone;
    manager.desiredAccuracy = kCLLocationAccuracyBest;
    [manager startUpdatingLocation];

 }
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
 {
   NSLog(@"%f",newLocation.coordinate.latitude);
   lbl.text=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude];
 }

.但是当我运行这段代码时,这个委托方法不会被触发。所以请指导我如何在单独的线程中获取位置更新。

4

4 回答 4

2

您的委托对象的方法是从您启动相应位置服务的线程中调用的。该线程本身必须有一个活动的运行循环,就像在应用程序的主线程中找到的那样。——来自苹果文档

于 2013-07-18T08:06:15.513 回答
0

你能试试这个。

 dispatch_async(newThread, ^(void) {

       [self fetch];
   }); 

希望你能得到解决的问题。

于 2012-12-17T06:57:29.787 回答
-2

在 .h 文件中

MainView *ctl;
NSMutableDictionary *dictSubPoses;

- (id)initWithCtl:(MainView*)_ctl;

在 .m 文件中

- (id)initWithCtl:(MainView*)_ctl
{
   if(self = [super init]) 
   {
      ctl = _ctl; //[_ctl retain];
   }

   return self;
}

- (void)main 
{
   [ctl performSelector:@selector(yourMethod) withObject:dictSubPoses];
}
于 2012-12-17T07:43:58.107 回答
-2

在 .h 文件中

#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

//Set Delegate  
    CLLocationManagerDelegate
// Declare
    CLLocationManager *locationManager;

在 .m 文件中

-(void)ViewDidLoad
{
    locationupadate=YES;
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = 100.0f;
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{

     if(locationupadate)
     {
           NSLog(@"%f",newLocation.coordinate.latitude);
          lbl.text=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude];

     }
于 2012-12-17T06:59:24.977 回答