1

私は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 に答える