任何人都可以帮我使用CLLocationManager吗?

时间:2012-04-03 00:58:28

标签: iphone cocoa-touch core-location cllocationmanager

我有两个问题。 (首先)我试图让它在iPhone移动到位的任何地方,弹出警报框并显示它们的经度以及它们现在的纬度。这是为了测试我正在进行的更大项目的一部分。问题是,根本没有警报框弹出。我认为当位置管理员获得一个新位置时,它会激活代表,该代表应该在警告框中显示该位置,但是根本没有任何事情发生。

以下是我如何设置位置管理器:

    - (void)viewDidLoad
{
    locationManager =[[CLLocationManager alloc] init];
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
}

这是代表:

    -(void) locationmanager: (CLLocationManager *) manager
        didUpdateToLocation: (CLLocation *) newLocation
        fromLocation: (CLLocation *) oldLocation
{  
    float oldlat; 
    float oldlng;
    float lat;
    float lng;
    NSDate *oldtime;
    NSDate *newtime;

    lat = newLocation.coordinate.latitude;
    lng = newLocation.coordinate.longitude;
    newtime = newLocation.timestamp;
    oldlat = oldLocation.coordinate.latitude;
    oldlng = oldLocation.coordinate.longitude;    
    oldtime = oldLocation.timestamp;

    NSNumber *oldlong = [NSNumber numberWithFloat:oldlng];
    NSNumber *newlat = [NSNumber numberWithFloat:lat];  
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:oldlong
                          message:newlat 
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Submit",nil];
    [alert show];

(其次)一旦我对我能够跟踪新旧latlng感到满意,有人知道存储数据的最佳方式吗?我已经研究过sqlite,核心数据,只是使用数组,但我仍然怀疑最好的存储lat,lng,时间戳和用户名的方法,每天可能产生几百次,大约200次用户,然后将其发送到服务器。

我知道这是一个很长的问题,但任何见解都会非常感激!

1 个答案:

答案 0 :(得分:0)

确定。我真的很惊讶为什么你的应用程序没有在这一行崩溃:

 UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:oldlong
                      message:newlat 
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"Submit",nil];

如果尝试正确理解UIAlertView参数,您会看到initWithTitlemessage参数的类型为NSString,您传递的内容为NSNumberNSString表示纬度和经度,并将它们作为参数传递给它。

 NSString *long1=[[NSString alloc]initWithFormat:@"%f",oldlong];
 NSString *lat1=[[NSString alloc]initWithFormat:@"%f",newlat];

 UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:long1
                      message:lat1 
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"Submit",nil];

但在didUpdateToLocation中显示警告并不是一个好主意,因为它会不断被调用,因此每隔一秒就会弹出警报以锁定您的互动。虽然这段代码对我有用。看看截图。

enter image description here