[英]How to retain the values of an array
我有兩個視圖控制器。 第一個有一個 segue 到另一個視圖 controller。我想要的后一個視圖 controller 是添加來自文本字段的項目,然后通過單擊按鈕將其保存在數組中。 然后這個數組將使用 NSUserDefaults 保存。
在下面的代碼中,我可以成功地將項目存儲在我的數組中。 這個數組也是使用 NSUserDefaults 保存的。 然而,當我回到我的第一個視圖 controller,然后再次進入我的第二個視圖 controller 以在我的數組中添加新項目時,我之前存儲的項目不見了。 新添加的項目是唯一保存的項目。
請指教:)
在我的.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
從NSUserDefaults
檢索的對象始終是不可變的,即使您為鍵設置了可變的 object 也是如此。 您可以將其視為 NSUserDefaults 制作副本。
如果您需要基於 NSUserDefaults 中存儲的內容的可變NSUserDefaults
,請制作一個可變副本。 例如:
NSMutableArray *cardName = [[[defaults objectForKey:@"cardName"] mutableCopy] autorelease];
正如上面給出的代碼所示,您剛剛設置了新創建的卡名 object 我認為您必須首先從 nsuserdefaluts 獲取所有數據並將它們添加到您的 _nameOfCards 數組,然后在 addNewCard:(id)sender 方法中添加新對象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *cardName = [defaults objectForKey:@"cardName"];
self.nameOfCards = cardName;
[self.nameOfCards addObject:self.cardNameTextField.text];
NSMutableArray *finalCardNames = [[NSMutableArray alloc] initWithArray:self.nameOfCards copyItems:YES];
[defaults setObject:finalCardNames forKey:@"cardName"];
[defaults synchronize];
我想這會解決你的問題試試它有美好的一天
請嘗試改用 singleton。 在這里查看我的答案: https://stackoverflow.com/a/10093449/542400但將其設為 NSArray 而不是字典。
使用 NSMutableArray 比使用 NSArray 更好,因為您可以編輯、添加和刪除 NSMutableArray 中的元素。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.