NSUserDefault更新公式 [英] NSUserDefault Update Formula

查看:201
本文介绍了NSUserDefault更新公式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关于如何通过NSUserDefault更新公式的问题。所以我有两个文本字段需要保持我的公式uptodate。所以用户输入数字(值)然后数字需要转到我的公式,但公式只显示我的距离值:)。

Have a question on how can I update my formula by NSUserDefault. So I have two text field which needs to keep my Formula uptodate. So the user types in there number (value) then that numbers needs to go to my formula but the formula only showing me the distance value :).

推荐答案

我尝试了一些更改代码。这是我的 .h 文件和 .m 文件。尝试这个。现在我也不明白你想要找到什么,但是这段代码给了我的值不是 nan 。在编写代码时,不要忘记以小写字母开始变量名称,这是一种标准方式。如果将变量设置为属性,也可以使用 self

I tried your code with some changes. Here are my .h file and .m files. Try this. Now also I didn't understand what your trying to find out, but this code gives me the values not a nan. While you writing code, don't forget to start your variable name in small letter that is a standard way. And also use self if you set a variable as property.

ViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController
<UITextFieldDelegate,CLLocationManagerDelegate>{
    IBOutlet MKMapView *mapView;
    IBOutlet UITextField *textGas;
    IBOutlet UITextField *textMoney;
    IBOutlet UITextField *textTotal;
    IBOutlet UITextField *textDistance;
}

@property (nonatomic, retain) CLLocationManager *locationManager;
@end

ViewController.m

 #import "ViewController.h"



    @interface ViewController ()
    {
        double totalDistance;
        float gas,money;
    }
    @end

    @implementation ViewController
    @synthesize locationManager;


    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
        [self.locationManager startUpdatingLocation];

//set default value for Gas
        if (![[NSUserDefaults standardUserDefaults] objectForKey:@"Gas"]) {
            [[NSUserDefaults standardUserDefaults] setObject:@"1.0" forKey:@"Gas"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }

//set default value for Money
        if (![[NSUserDefaults standardUserDefaults] objectForKey:@"Money"]) {
            [[NSUserDefaults standardUserDefaults] setObject:@"1.0" forKey:@"Money"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }

        gas = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Gas"] floatValue];
        money =  [[[NSUserDefaults standardUserDefaults] objectForKey:@"Money"] floatValue];

        textGas.text = [NSString stringWithFormat:@"%.1f",gas];
        textMoney.text = [NSString stringWithFormat:@"%.1f",money];

        // Do any additional setup after loading the view, typically from a nib.
    }

    -(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        if ([[NSUserDefaults standardUserDefaults] objectForKey:@"Gas"])
            textGas.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"Gas"];
        else
            textGas.text = @"0";//set default value

        if ([[NSUserDefaults standardUserDefaults] objectForKey:@"Money"])
            textMoney.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"Money"];
        else
            textMoney.text = @"0.01";//set default value



    }

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [textMoney resignFirstResponder];
        [textGas resignFirstResponder];
    }

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
    {
        if (buttonIndex == 1)
        {
            exit(0);
        }
        if (buttonIndex == 0) {
            [self.locationManager stopUpdatingLocation];
            mapView.showsUserLocation = NO;
        }

    }
    #pragma mark - UITextFieldDelegate
    -(void)textFieldDidEndEditing:(UITextField *)textField
    {

        if ([textField.text intValue] == 0) {
            textGas.text = [NSString stringWithFormat:@"%.1f",gas];
            textMoney.text = [NSString stringWithFormat:@"%.1f",money];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                            message:@"Value cann't be zero."
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            alert = nil;
            return;
        }

        if (![textField.text length]) {
            textGas.text = [NSString stringWithFormat:@"%.1f",gas];
            textMoney.text = [NSString stringWithFormat:@"%.1f",money];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                            message:@"Value cann't be empty."
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            alert = nil;
            return;
        }

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        if (textField == textGas) {
            [defaults setObject:textGas.text forKey:@"Gas"];
            gas = [textGas.text floatValue];
        }
        else if (textField == textMoney)
        {
            [defaults setObject:textMoney.text forKey:@"Money"];
            money = [textMoney.text floatValue];
        }
        [defaults synchronize];
    }

    - (BOOL) textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        return YES;
    }

    #pragma mark -
    #pragma mark CLLocationManagerDelegate Methods

    - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation {
        {
            // Zoom to the current user location.
            MKCoordinateRegion userLocation = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 1200.0, 1200.0);
            [mapView setRegion:userLocation animated:NO];
            mapView.showsUserLocation = YES;
        }



        if (!oldLocation)
            totalDistance = 0.0;
        else
            totalDistance += [newLocation distanceFromLocation:oldLocation];


        double distance = totalDistance*0.00062137119;
        textTotal.text = [[ NSString alloc] initWithFormat:@"$%.2f", distance/gas*money];
        textDistance.text = [NSString stringWithFormat:@"%.2f Miles", distance];

    }


    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    @end

模拟器中的结果是

And the result in Simulator is

不要忘记连接来自界面构建器的委托 IBOutlet

Don’t forget to connect delegates and IBOutlet from interface builder.

这篇关于NSUserDefault更新公式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆