按钮保存数据 NSUserDefaults 不起作用

button save data NSUserDefaults doesn't work


你好!
我从 Xcode 开始(我是法国人,所以我的英语不完美,抱歉),我需要你的帮助。
我的项目是制作一个应用程序,它可以计算每个学校科目(五个)的 class 平均分。我使用变量 NSUserDefaults 来保存我的分数,但它不起作用,我不知道为什么。

这附上了我的ViewController.h一所学科学校(其他的都差不多,只是变量变了)

#import <UIKit/UIKit.h>

@interface INF231ViewController : UIViewController{

IBOutlet UITextField *INF231CC1;
IBOutlet UITextField *INF231CC2;
IBOutlet UITextField *INF231ET1;
IBOutlet UITextField *INF231ET2;
IBOutlet UILabel *INF231moyenne;}

@property(nonatomic,retain) UITextField *INF231CC1;
@property(nonatomic,retain) UITextField *INF231CC2;
@property(nonatomic,retain) UITextField *INF231ET1;
@property(nonatomic,retain) UITextField *INF231ET2;
@property(nonatomic,retain) UILabel *INF231moyenne;

- (IBAction)INF231save:(id)sender;
- (IBAction)INF231calculer:(id)sender;

@end

这是 ViewController.m :

#import "INF231ViewController.h"
@interface INF231ViewController ()
@end

@implementation INF231ViewController

- (void)viewDidLoad {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

int INF231noteCC1 = [defaults integerForKey:@"INF231noteCC1"];
int INF231noteCC2 = [defaults integerForKey:@"INF231noteCC2"];
int INF231noteET1 = [defaults integerForKey:@"INF231noteET1"];
int INF231noteET2 = [defaults integerForKey:@"INF231noteET2"];

NSString *INF231noteCC1String = [NSString stringWithFormat:@"%i",INF231noteCC1];
NSString *INF231noteCC2String = [NSString stringWithFormat:@"%i",INF231noteCC2];
NSString *INF231noteET1String = [NSString stringWithFormat:@"%i",INF231noteET1];
NSString *INF231noteET2String = [NSString stringWithFormat:@"%i",INF231noteET2];

INF231CC1.text = INF231noteCC1String;
INF231CC2.text = INF231noteCC2String;
INF231ET1.text = INF231noteET1String;
INF231ET2.text = INF231noteET2String;

[super viewDidLoad];}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];}

- (IBAction)INF231save:(id)sender {
[INF231CC1 resignFirstResponder];
[INF231CC2 resignFirstResponder];
[INF231ET1 resignFirstResponder];
[INF231ET2 resignFirstResponder];

int INF231noteCC1 = [[INF231CC1 text] integerValue];
int INF231noteCC2 = [[INF231CC2 text] integerValue];
int INF231noteET1 = [[INF231ET1 text] integerValue];
int INF231noteET2 = [[INF231ET2 text] integerValue];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setInteger:INF231noteCC1 forKey:@"INF231noteCC1"];
[defaults setInteger:INF231noteCC2 forKey:@"INF231noteCC2"];
[defaults setInteger:INF231noteET1 forKey:@"INF231noteET1"];
[defaults setInteger:INF231noteET2 forKey:@"INF231noteET2"];

[defaults synchronize];

NSLog(@"Data saved");}

@end

当我按下按钮 'save' 时,它被写入控制台 "Data saved" 但键盘没有被禁用并且数据消失了。
我也放了一张 Main.Storyboard 的照片,这样你可以看得更清楚 1。如果您需要其他一切来找出问题所在并帮助我解决问题,请不要犹豫。
我也想知道我是否应该为

使用不同的变量
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

of "*defaults" 虽然我还有其他数据要保存在其他 ViewController 中用于我的其他学科学校。

如果你花时间帮助我,非常感谢!
Xcode 版本:7.3.1
iOS 版本:9.3.3

intNSInteger有区别。

[[INF231CC1 text] integerValue]returns一个NSInteger,但是你把它保存在一个int.

这应该可以代替:

NSInteger INF231noteCC1 = [[INF231CC1 text] integerValue];

NSUserDefaults也一样:

integerForKey returns 一个 NSInteger 而不是 int.

请试试这个:

@implementation INF231ViewController
@synthesize INF231CC1, INF231CC2, INF231ET1, INF231ET2; // add

@end

希望对你有所帮助。