2017-08-25 15 views
-1

現在のユーザーの場所をマップビューに表示して拡大表示しようとしています。 この私のコード -現在のユーザーの場所を決定できず、ズームインできません

#import "WhereamiAppDelegate.h" 
#import "WhereamiViewController.h" 


    @implementation WhereamiAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 
self.viewController = [[WhereamiViewController alloc] initWithNibName:@"WhereamiViewController" bundle:nil]; 
self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

@interface WhereamiViewController : UIViewController<CLLocationManagerDelegate,MKMapViewDelegate,UITextFieldDelegate> 
{ 

//@public RootObject *rootObj; 
    CLLocationManager *locationManager; 

IBOutlet MKMapView *worldView; 
IBOutlet UIActivityIndicatorView *activityIndicator; 
IBOutlet UITextField *locationTitleField; 
} 
-(IBAction)buttonDidGetPressed:(id)sender; 
-(BOOL)textFieldShouldReturn:(UITextField *)textField; 
-(void)findLocation; 
-(void)foundLocation:(CLLocation *)loc; 
@end 

@implementation WhereamiViewController 
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
    if (self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
    // rootObj= [[RootObject alloc] init];//RootObject initialised 
    // NSLog(@"RootObject–– %@",rootObj); 
    locationManager= [[CLLocationManager alloc] init]; 

    [locationManager setDelegate:self];//self is Whereamicontroller. The delegate pointer is of type id<CLLocationManagerDelegate> and is an ivar of CLLocationManager. 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

} 
return self; 
} 

-(void) viewDidLoad{ 
    NSLog(@"%@",NSStringFromSelector(_cmd)); 
    worldView.showsUserLocation=YES; 
} 

-(void)mapViewWillStartLocatingUser:(MKMapView *)mapView{ 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
} 
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{ 
    NSLog(@"%@",NSStringFromSelector(_cmd)); 

    CLLocationCoordinate2D centerCoordinate= [userLocation coordinate]; //get the coordinate of current location. 
    NSLog(@"%@ (%f, %f)",userLocation.location,centerCoordinate.latitude,centerCoordinate.longitude); 
    MKCoordinateSpan span= MKCoordinateSpanMake(250, 250);//Structure members 
    MKCoordinateRegion mapPortionToDisplay= MKCoordinateRegionMakeWithDistance(centerCoordinate, span.latitudeDelta, span.longitudeDelta);//span.latitudeDelta=250 and span.longitudeDelta=250 

    [worldView setRegion:mapPortionToDisplay animated:YES]; 
//  [worldView setRegion:mapPortionToDisplay]; 

    [worldView regionThatFits:mapPortionToDisplay]; 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ //CLLocationManagerDelegate method implementation 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
// NSTimeInterval t0=[[locations lastObject] timeIntervalSinceNow]; 
NSLog(@"current location–– %@",(CLLocation *)[locations lastObject]); 
} 

出力 -

2017年8月25日22、次のとおりです。16:19.178 Whereami2 [1601:758525] initWithNibName:バンドル:

2017-08-25 22:16:19.294 Whereami2 [1601:758525] viewDidLoad

2017-08-25 22:16:20.607 Whereami2 [1 601:758525] mapViewWillStartLocatingUser:

上記の行からは、そのはっきりと見ることのMapView:didUpdateUserLocation:メッセージは、すべてのビューのデリゲートをマッピングするために渡されませんでした。 locationManager:didUpdateLocations:の場合も同じです。 showsUserLocationsプロパティは、CLLocationManagerのデリゲート、viewcontroller(MKMapViewのデリゲートと同じです)、このメッセージも実装に送信することになっています。そうじゃない?

+0

のようなものを設定している場所、あなたのlocationManager宣言を表示することができます表示されていないか?、どのようにあなたのViewControllerを初期化していますか? –

+0

@interface WhereamiViewController:UIViewController { CLLocationManager * locationManager; IBOutlet MKMapView * worldView; IBOutlet UIActivityIndi​​catorView * activityIndi​​cator; IBOutlet UITextField * locationTitleField; }この質問に関連する両方のプロトコルに準拠した私のビューコントローラです – rahulbsb

+0

この行をviewDidLoad NSLog(@ "%@"、locationManager)に追加して、何が印刷されるか教えてください –

答えて

1

ゲッターとセッターを合成せずにlocationManagerをインスタンス変数として宣言しました。おそらく割り当てが解除されています。ちょうどそれプロパティますworldViewについては

@interface WhereamiViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate, UITextFieldDelegate> 

@property (nonatomic, strong) CLLocationManager *locationManager; 

@end 

を、私はあなたがworldView.delegate = self

+0

私はこの手順をXIBファイルの初期段階で、MKMapViewからファイルの所有者(Whereamiviewcontroller)にコントロールをドラッグしてドラッグし、デリゲートivarを同じ場所に設定しました。 – rahulbsb

+0

私もテストデバイスで実行しようとしました。変わりはない。これで私は何をしますか? – rahulbsb

+0

秒でホールド..私はただNSLogged worldView。View Controllerメソッドの1つにデリゲートします。それはNULLであることが判明しました。しかし、これはどのように可能ですか? MKMapViewオブジェクトの代理人ポインタがXIBファイルのWhereamiviewcontrollerを指していました。 – rahulbsb

関連する問題