0
votes

1.Whatever I do the saveButton method won't save and it still returns 0 for REJECTIONS 2.Please help me fix my saveButton to userdefaults method 3.I've tried multiple things and the values still won't change

#import "CCViewController.h"

@interface CCViewController ()

@end

@implementation CCViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
//    [NSUserDefaults integerForKey:@"REJECTIONS"];

    self.rejectLabel.text=REJECTIONS;
    self.acceptedLabel.text=ACCEPTED;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.customInputTextField resignFirstResponder];
}
- (IBAction)resetButton:(UIButton *)sender {
    self.rejectLabel.text=@"0";
    self.acceptedLabel.text=@"0";

}
- (IBAction)rejectButton:(UIButton *)sender {
    int current=stringToInt(self.rejectLabel.text);
    int test=stringToInt(self.customInputTextField.text);
    if (test>0) {
        self.rejectLabel.text=self.customInputTextField.text;
        self.customInputTextField.text=nil;
    } else {
        current++;
        self.rejectLabel.text=intToString(current);
    }
    if (stringToInt(self.rejectLabel.text)==3000) {
        UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"Achievement Message" message:@"You have reached 3000 rejections!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles: nil];
        [alertView show];
    }
}

NSInteger stringToInt(NSString *string) {
    return [string integerValue];
}

NSString* intToString(NSInteger integer) {
    return [NSString stringWithFormat:@"%d", integer];
}

- (IBAction)acceptedButton:(UIButton *)sender {
    int current=stringToInt(self.acceptedLabel.text);
    int test=stringToInt(self.customInputTextField.text);
    if (test>0) {        
        self.acceptedLabel.text=self.customInputTextField.text;
        self.customInputTextField.text=nil;
    } else {
        current++;
        self.acceptedLabel.text=intToString(current);
    }
    NSLog(@"after is: %i", current);
}

- (IBAction)unrejectButton:(UIButton *)sender {
    int current=stringToInt(self.rejectLabel.text);
        current--;
    if (current>=0) {
        self.rejectLabel.text=intToString(current);
    } else {UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"Error Message" message:@"You can not have negative rejections!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alertView show];}
    NSLog(@"after is: %i", current);
}
- (IBAction)saveButton:(UIButton *)sender {
    NSString *rejected=self.rejectLabel.text;
    int reject=intToString(self.rejectLabel.text);
    NSString *accepted=self.acceptedLabel.text;
    NSUserDefaults *rejectTry=[NSUserDefaults standardUserDefaults];
    [rejectTry setObject:self.rejectLabel.text forKey:REJECTIONS];
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:self.rejectLabel.text forKey:REJECTIONS];
    [[NSUserDefaults standardUserDefaults] setValue:@"reject" forKey:REJECTIONS];
    [[NSUserDefaults standardUserDefaults] setValue:self.rejectLabel.text forKey:REJECTIONS];
    [[NSUserDefaults standardUserDefaults] setObject:@"accepted" forKey:ACCEPTED];
}
    NSLog(@"test save %@ & %@ & %@ & %@", REJECTIONS, ACCEPTED, self.rejectLabel.text, self.acceptedLabel.text);
    [rejectTry synchronize];
    NSLog(@"test save %@ & %@ & %@ & %@, &a %i", REJECTIONS, ACCEPTED, self.rejectLabel.text, self.acceptedLabel.text, picker_value);

}

- (IBAction)loadButton:(id)sender {
    self.rejectLabel.text=REJECTIONS;
    self.acceptedLabel.text=ACCEPTED;

}
@end
  1. Still not saving to the keys rejections and accepted

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject:self.rejectLabel.text forKey:REJECTIONS];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:self.acceptedLabel.text forKey:ACCEPTED];

    [[NSUserDefaults standardUserDefaults] synchronize]; NSLog(@"test save %@ & %@ & %@ & %@ pointers %@ %@", REJECTIONS, ACCEPTED, self.rejectLabel.text, self.acceptedLabel.text, defaults, prefs);

1

1 Answers

0
votes

It looks like you have muddled up your pointers. You have two references to the same instance of userDefaults yet you expect different results when writing to each one. Here, lets walk through your code

NSString *rejected=self.rejectLabel.text;
int reject=intToString(self.rejectLabel.text);
NSString *accepted=self.acceptedLabel.text;
NSUserDefaults *rejectTry=[NSUserDefaults standardUserDefaults];

Lets stop here. standardUserDefaults is a singleton object. You are not creating a user defaults object when you call this method. You then go on to set a value

[rejectTry setObject:self.rejectLabel.text forKey:REJECTIONS];

This works fine.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:self.rejectLabel.text forKey:REJECTIONS];

Now you have written over your previous value!

[[NSUserDefaults standardUserDefaults] setValue:@"reject" forKey:REJECTIONS];

And you do it again!

[[NSUserDefaults standardUserDefaults] setValue:self.rejectLabel.text forKey:REJECTIONS];
[[NSUserDefaults standardUserDefaults] setObject:@"accepted" forKey:ACCEPTED];

Conclusion

What you should be doing is creating a local variable like this NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; Then use this for all your writes. Then you will see how you are overwriting the value with key REJECTIONS multiple times