2012-04-09 7 views
-1

私は2つのView Controllerを持っています。最初のものは別のビューコントローラにセグを持っています。後者のビューコントローラでは、テキストフィールドからの項目を追加し、ボタンをクリックして配列に保存します。この配列は、NSUserDefaultsを使用して保存されます。NSUserDefaultsを使用して保存された配列の値を保持

以下のコードでは、項目を配列に正常に保存できます。この配列は、NSUserDefaultsを使用して保存されます。しかし、最初のView Controllerに戻り、2番目のView Controllerに再度アクセスして配列に新しい項目を追加すると、以前保存した項目はなくなりました。新しく追加されたアイテムだけが保存されました。

誰かが私はいくつかのシリアライゼーションをしなければならないと言った、どのように行われますか?そして他の方法がある場合は、私の.mファイルの私の.hファイルで

@interface AddCardViewController : UIViewController <UITextFieldDelegate> 

@property (strong, nonatomic) IBOutlet UITextField *cardNameTextField; 

@end 

@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に保存されます。毎回新しいものを配列やユーザのデフォルトに追加しました。 –

+0

のaddNewCardメソッド - NSUserDefaultsのデータをnameOfCardsに読み込んでから新しいものを追加し、[配列の値を保持する方法]の – SVGreg

+0

の複製を保存します(http://stackoverflow.com/questions/10069593/how-to- array-of-an-arrayを保持する) –

答えて

0

:)をアドバイスしてくださいので、appdelegatemutablearrayを取ると、 appdidfinishlaunchingに割り当てます。だから、もしあなたがotherviewsから何かを追加すると、あなたのデータを置き換えることはありません。

多分それはあなたを助けるでしょう。

0

次のように私の意見では仮想的なエラーは次のとおりです。

NSMutableArray * = cardName _nameOfCards; 

はここ_nameOfCardsが初期化され、その後、0の要素に設定されている、あなたは、最初はそう、ディスクをstorato何の値を持っていたcardNameで参照することが現在cardNameには古いコンテンツはなくなりましたが、新しいコンテンツのみがあります。ここからあなたは間違っています。

cardNameのaddObjectを_nameOfCardsにする必要があります。

ホープヘルプ

関連する問題