2012-04-09 84 views
-1

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

当您点击addnewcard按钮时,它将数组保存在nsuserdefaults中。但是当你回到那个viewcontroller你的数组将是零。所以如果你添加一些东西,那么它会存储到你的数组中,然后它会保存在userdefaults中。所以每次你在array和userdefaults中添加新的东西。 – 2012-04-09 10:17:35

+0

in addNewCard方法 - 将数据从NSUserDefaults读入到nameOfCards中,然后添加新的数据,然后保存 – SVGreg 2012-04-09 10:29:37

+0

可能的[如何保留数组值]的副本(http://stackoverflow.com/questions/10069593/how-to-保留最值-的-一个阵列) – 2012-04-09 10:52:39

回答

0

所以采取mutablearray的appdelegatealloc init in appdidfinishlaunching。所以如果你添加其他视图的东西,它不会替换你的数据。

也许它会帮助你。

0

在我看来一个假设的错误如下:

NSMutableArray * = cardName _nameOfCards; 

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

您应该创建_nameOfCards的cardName的addObject。

希望有帮助