我有两个视图控制器。第一个有一个segue到另一个视图控制器。我希望为后者的视图控制器添加来自文本字段的项目,然后通过点击按钮将其保存在数组中。然后这个数组将被保存使用NSUserDefaults。如何保留一个数组的值
关于下面的代码,我可以成功地将项目存储在我的数组中。这个数组也使用NSUserDefaults保存。然而,当我回到我的第一个视图控制器,然后再次继续到我的第二个视图控制器添加新的项目在我的数组,我以前存储的项目已经消失。新增项目是唯一保存的项目。
建议,请在我的.m文件
@interface AddCardViewController()
@property (nonatomic, strong)NSMutableArray *nameOfCards;
@end
@implementation AddCardViewController
@synthesize cardNameTextField = _cardNameTextField;
@synthesize nameOfCards = _nameOfCards;
// setting my array
- (NSMutableArray *)nameOfCards
{
if (!_nameOfCards) _nameOfCards = [[NSMutableArray alloc] init];
return _nameOfCards;
}
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.cardNameTextField.delegate = self;
}
- (BOOL) textFieldShouldReturn:(UITextField *)textField{
[self.cardNameTextField resignFirstResponder];
return YES;
}
- (void)viewDidLoad
{
//getting the data saved
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *cardName = [defaults objectForKey:@"cardName"];
NSLog(@"contents of my array %@", cardName);
[super viewDidLoad];
}
- (IBAction)addNewCard:(id)sender {
[self.nameOfCards addObject:self.cardNameTextField.text];
NSLog(@"contents :%@", _nameOfCards);
// this is how to save the data
NSMutableArray *cardName = _nameOfCards;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:cardName forKey:@"cardName"];
[defaults synchronize];
NSLog(@"data saved");
}
@end
无法直接“保存”对象数组。该数组只包含指针(地址)。如果你保存并重新加载它们,它们会有含糊不清的含义。你需要序列化它。根据数组或其他东西重建字符串。 – 2012-04-09 06:15:30
为保存数组值,最好使用plist而不是NSUserDefaults。 – vishy 2012-04-09 06:24:01
@HeShiming感谢您的建议。我如何序列化数组?我对这种编程语言很陌生,所以我不太明白。 – Hans 2012-04-09 06:25:11