我有兩個視圖控制器。第一個有一個segue到另一個視圖控制器。我希望爲後者的視圖控制器添加來自文本字段的項目,然後通過點擊按鈕將其保存在數組中。然後這個數組將被保存使用NSUserDefaults。保留使用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
當您點擊addnewcard按鈕時,它將數組保存在nsuserdefaults中。但是當你回到那個viewcontroller你的數組將是零。所以如果你添加一些東西,那麼它會存儲到你的數組中,然後它會保存在userdefaults中。所以每次你在array和userdefaults中添加新的東西。 – 2012-04-09 10:17:35
in addNewCard方法 - 將數據從NSUserDefaults讀入到nameOfCards中,然後添加新的數據,然後保存 – SVGreg 2012-04-09 10:29:37
可能的[如何保留數組值]的副本(http://stackoverflow.com/questions/10069593/how-to-保留最值-的-一個陣列) – 2012-04-09 10:52:39