我有两个视图控制器。第一个具有到另一个视图控制器的segue。我想要的后一个视图控制器是添加来自文本字段的项目,然后通过按钮单击将其保存在数组中。然后使用NSUserDefaults保存此数组。
在下面的代码中,我可以成功地在我的数组中存储项目。此阵列也使用NSUserDefaults保存。然而,当我回到我的第一个视图控制器,然后再次进入我的第二个视图控制器以在我的阵列上添加新项目时,我之前存储的项目已经消失。新添加的项目是唯一保存的项目。
有人说我要做一些序列化,怎么做?如果有任何其他方式,建议请:)
在我的.h文件中
@interface AddCardViewController : UIViewController <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *cardNameTextField;
@end
在我的.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
答案 0 :(得分:0)
所以在 appdelegate 中使用 mutablearray ,在 appdidfinishlaunching 中使用 alloc init 。因此,如果您从其他视图添加内容,它将不会替换您的数据。
也许它会帮助你。
答案 1 :(得分:0)
在我看来,假设错误如下:
NSMutableArray * = cardName _nameOfCards;
这里_nameOfCards被初始化然后设置为0个元素,然后你用cardName创建一个最初具有storato磁盘值的引用,所以现在cardName不再有旧内容,而只有新内容。从这里你错了。
你应该创建一个cardName为_nameOfCards的addObject。
希望有帮助