簡體   English   中英

如何保留數組的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM