简体   繁体   English

按钮保存数据NSUserDefaults不起作用

[英]button save data NSUserDefaults doesn't work


Hello! 你好!
I begin with Xcode (and I'm French so my english isn't perfect sorry) and I would need your help please. 我从Xcode开始(我是法国人,所以我的英语不是完美的抱歉),我需要你的帮助。
My project is to make an app which would calculate my average in class for each school subject (five). 我的项目是制作一个应用程序,用于计算每个学校科目的平均课程(五)。 I used the variable NSUserDefaults to save my marks but it doesn't work and I don't know why. 我使用变量NSUserDefaults保存我的标记,但它不起作用,我不知道为什么。

This attached my ViewController.h for one subject school (the others are pretty the same, only the variable changes) 这附加了我的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

And this is the ViewController.m : 这是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

When I push the button 'save' it is written in the Console "Data saved" but the Keyboard isn't disabled and the data disappeared. 当我按下“保存”按钮时,它会在控制台“保存数据”中写入,但键盘未被禁用且数据消失。
I also put a picture of the Main.Storyboard so you can see better 1 . 我还把Main.Storyboard的图片放在Main.Storyboard这样你就可以看到更好的1 If you need everything else to figure out where is the problem and to help me solve it, don't hesitate. 如果您需要其他一切来找出问题所在并帮助我解决问题,请不要犹豫。
I was wondering too if I should use different variable for 我也想知道我是否应该使用不同的变量

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

of "*defaults" though I have other data to save in others ViewController for my other subject school. “* defaults”尽管我有其他数据保存在其他ViewController我的其他学科。

Thanks a lot if you take the time to help me! 如果你花时间帮助我,非常感谢!
Version of Xcode : 7.3.1 Xcode版本:7.3.1
Version of iOS : 9.3.3 iOS版本:9.3.3

There is a difference between int and NSInteger . intNSInteger之间存在差异。

[[INF231CC1 text] integerValue] returns an NSInteger , but you save it in an int . [[INF231CC1 text] integerValue]返回一个NSInteger ,但是将它保存在int

This should work instead: 这应该工作:

NSInteger INF231noteCC1 = [[INF231CC1 text] integerValue];

The same is for NSUserDefaults : NSUserDefaults也是NSUserDefaults

integerForKey returns an NSInteger and not int . integerForKey返回NSInteger而不是int

Please try this: 请试试这个:

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

@end

Hope it helps to you. 希望它对你有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM