比较速度值问题(我从CLLocationManager获得的内容)

时间:2016-01-29 09:21:57

标签: ios objective-c xcode

我对这种提问方式感到有些困惑

我在这里提供支持图片的查询。关于这个问题,请你帮我解决一下

第1步:我的要求如下:通过使用CLLocationManger委托方法我获取速度值,如:

- (void)startLocationUpdates{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.pausesLocationUpdatesAutomatically = YES;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    [locationManager requestWhenInUseAuthorization];
[locationManager startUpdatingLocation];
}
#pragma mark
#pragma mark - CLLocationManagerDelegate
 - (void)locationManager:(CLLocationManager *)manager
 didUpdateLocations:(NSArray *)locations{
float speed = locationManager.location.speed;
float speedInKmph = speed * 3.6;   // to convert the speed into kmph.
NSString *speedValue =[NSString stringWithFormat:@"%.f Kmph ",speedInKmph];
self.currentSpeedLblRef.text = speedValue;
self.maxSpeedLblRef.text = speedValue;
}

第2步: currentSpeedLblRef,maxSpeedLblRef - >这些是我的UILabels

示例:现在我开车了 - >这是我第一次打开应用程序并且我获得了当前的汽车速度(例如: 120 Kmph )然后我需要在“maxSpeedLblRef”中显示相同的值( 120 Kmph )也

经过一段时间后我的当前车速如果 50 Kmph 。但我需要在“maxSpeedLblRef”中显示值是 - >最大值 - >意味着 120公里。因为我已经获得120公顷的价值了[/ p>]

之后如果我目前的车速是180公里 - >我需要显示“maxSpeedLblRef”值:180 Kmph。因为它是最新的比较120 Kmph

关闭应用程序然后

如果我重新打开应用程序,我想显示像“maxSpeedLblRef”这样的值 - > 180公里。因为此值是先前保存的值

enter image description here

这是我的源代码Click here link

1 个答案:

答案 0 :(得分:1)

你在这里缺少一些简单的东西!

您需要存储最大速度以进行比较 - 您在此处所做的只是每次都使用当前值更新标签。设置一个类级属性,初始值= 0,并在当前速度>时更新它。最高速度。

有几种方法可以存储最大值,以便在您下次打开应用时存在。可能最容易使用用户默认值。有许多教程可用 - 尝试这一个http://code.tutsplus.com/tutorials/ios-sdk-working-with-nsuserdefaults--mobile-6039

好的 - 使用你的项目代码,这就是你需要的。

将ViewController.h更新为此

//  ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *currentSpeedLblRef;
@property (weak, nonatomic) IBOutlet UILabel *maxSpeedLblRef;

// you need to store the max speed
@property float speedMax;

-(void)loadDefaults;
-(void)storeDefaults;

@end

然后在VIewController.m中,用这个

替换viewDidLoad
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self loadDefaults];

    [self startLocationUpdates];
}

将locationManager函数更新为此

- (void)locationManager:(CLLocationManager *)manager
 didUpdateLocations:(NSArray *)locations{
    float speed = locationManager.location.speed;
    float speedInKmph = speed * 3.6;   // to convert the speed into kmph.
    NSString *speedValue =[NSString stringWithFormat:@"%.f Kmph ",speedInKmph];
    self.currentSpeedLblRef.text = speedValue;

    if (speedInKmph > self.speedMax)
    {
        self.speedMax = speedInKmph;

        [self storeDefaults];
    }
    NSString *speedMaxValue =[NSString stringWithFormat:@"%.f Kmph ",self.speedMax];

    self.maxSpeedLblRef.text = speedMaxValue;
}

,最后添加加载/存储函数

- (void)loadDefaults
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.speedMax = [defaults floatForKey:@"SpeedMax"];
}

- (void)storeDefaults
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setFloat:self.speedMax forKey:@"SpeedMax"];
    [defaults synchronize];
}