-1

私は2つのView Controllerを持っています。最初のものには、別のView Controllerへのセグエがあります。後者のView Controllerに必要なのは、テキストフィールドからのアイテムを追加し、ボタンをクリックして配列に保存することです。次に、この配列は NSUserDefaults を使用して保存されます。

以下のコードでは、配列にアイテムを正常に格納できます。この配列も NSUserDefaults を使用して保存されます。しかし、最初のビュー コントローラーに戻ってから、2 番目のビュー コントローラーに戻ってアレイに新しいアイテムを追加すると、以前に保存したアイテムがなくなっていました。新しく追加されたアイテムだけが保存されました。

誰かがシリアライズをしなければならないと言いましたが、それはどのように行われますか? 他の方法があれば、アドバイスをお願いします:)

私の.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
4

2 に答える 2

0

したがって、appdelegatemutablearrayを取得し、 appdidfinishlaunching でinit割り当てます。したがって、他のビューから何かを追加しても、データは置き換えられません。

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

于 2012-04-09T10:20:17.773 に答える
0

私の意見では、仮説上の誤りは次のとおりです。

NSMutableArray * = cardName _nameOfCards;

ここで _nameOfCards が初期化され、要素が 0 に設定されます。次に、最初にどの storato ディスクの値を持っていた cardName を使用して参照を作成するため、cardName には古いコンテンツがなくなり、新しいコンテンツのみが含まれるようになります。ここから、あなたは間違っています。

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

その助けを願って

于 2012-04-09T10:20:22.627 に答える