【问题标题】:Retaining the values of an array saved using NSUserDefaults保留使用 NSUserDefaults 保存的数组的值
【发布时间】:2012-04-09 10:04:26
【问题描述】:

我有两个视图控制器。第一个与另一个视图控制器有一个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

【问题讨论】:

  • 当您单击 addnewcard 按钮时,它会将数组保存在 nsuserdefaults 中。但是当您返回该视图控制器时,您的数组将为零。所以如果你添加一些东西,那么它将存储到你的数组中,然后它会保存在 userdefaults 中。所以每次你在数组和用户默认值中添加新东西。
  • 在 addNewCard 方法中 - 从 NSUserDefaults 读取数据到 nameOfCards,然后添加新的,然后保存

标签: iphone objective-c ios5 xcode4 nsuserdefaults


【解决方案1】:

所以在 appdelegate 中使用 mutablearray,在 appdidfinishlaunching 中使用 alloc init。所以如果你从其他视图中添加一些东西,它不会替换你的数据。

也许对你有帮助。

【讨论】:

    【解决方案2】:

    在我看来,假设错误如下:

    NSMutableArray * = cardName _nameOfCards;
    

    这里 _nameOfCards 被初始化然后设置为 0 个元素,然后你用 cardName 做一个引用,它最初有什么 storato 磁盘的值,所以现在 cardName 不再有旧的内容,而只有新的内容。从这里你错了。

    您应该为 _nameOfCards 的 cardName 创建一个 addObject。

    希望有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多