2011-10-04 78 views
0

我下面的大书呆子牧场指导书,并修改了我的应用程序delegate.h看起来像这样:的MKMapView didUpdateUserLocation不会被调用

#import <UIKit/UIKit.h> 
    #import <CoreLocation/CoreLocation.h> 
    #import <MapKit/MapKit.h> 
    @interface WhereamiAppDelegate : NSObject <UIApplicationDelegate,CLLocationManagerDelegate, MKMapViewDelegate> 
    { 
     IBOutlet UITextField *locationTitleField; 
     IBOutlet UIActivityIndicatorView *activityIndicator; 
     IBOutlet MKMapView *worldView; 
     CLLocationManager *locationManager; 
    } 
    @property (nonatomic, retain) IBOutlet UIWindow *window; 
    @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; 
    @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; 
    @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
    - (void)saveContext; 
    - (NSURL *)applicationDocumentsDirectory; 
@end 

的.M是这样的:

#import "WhereamiAppDelegate.h" 
@implementation WhereamiAppDelegate 
@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { 

    CLLocationCoordinate2D loc = [userLocation coordinate]; 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250, 250); 
    [worldView setRegion:region animated:YES]; 
    NSLog(@"didUpdateUserLocation is called"); 
    } 
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
    // Override point for customization after application launch. 

// Create location manager object 
    locationManager = [[CLLocationManager alloc] init]; 
// There will be a warning from this line of code; ignore it for now 
    [locationManager setDelegate:self]; 
// We want all results from the location manager 
    [locationManager setDistanceFilter:kCLDistanceFilterNone]; 
// And we want it to be as accurate as possible 
// regardless of how much time/power it takes 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
// Tell our manager to start looking for its location immediately 
// [locationManager startUpdatingLocation]; 
    [worldView setShowsUserLocation:YES]; 
// This line may say self.window, don't worry about that 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
     NSLog(@"%@", newLocation); 
} 
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
     NSLog(@"Could not find location: %@", error); 
} 

当我打开应用程序时,它应该放大到我的位置。但它不缩放,所以我把一个NSLog放在didUpdateUserLocation中,看它是否被调用。但它从未打印过,所以没有打电话。我该如何解决?

+0

注意我用的XCODE 4.1和4.3模拟器 – user973985

+0

没关系......我发现这是因为我忘了设定的委托! – user973985

+2

其实我并没有忘记......书籍〜! – user973985

回答

4

同样的事情发生在我身上......

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    ... 
    [worldView setDelegate:self]; 
    ... 
} 

THKS