0

私はNSMutableArrayと2を持っていNSDictionariesます。あるVCのボタンを押すだけで別のクラスに保存したい。問題は、後でそれらの配列を取得するときに、すでにそれらに変更を加えたときに、保存していた配列ではなく、取得する瞬間の実際の配列を取得することです。

その理由は何でしょうか?この方法で新しい配列と辞書を作成しようとしましたが、役に立ちませんでした。

- (void)recordValues {

    NSMutableArray *betaArray = [NSMutableArray arrayWithArray:labelsArray];
    newMailVC.bakcupLabelsArray = betaArray;
    NSLog(@"LABELS ARRAY COUNT ON SAVE IS %i", labelsArray.count);
    NSMutableDictionary *alphaDictionary = [NSMutableDictionary dictionaryWithDictionary:labelsDictionary];
    newMailVC.backupLabelsDictionary = alphaDictionary;
    NSMutableDictionary *betaDictionary = [NSMutableDictionary dictionaryWithDictionary:senderEmailsDictionary];
    newMailVC.backupEmailsDictionary = betaDictionary;
}

PS含むNSUserDefaultsため使用できず、配列を別のビューに転送したいのですが、ボタンを押して上記の方法で保存したときの状態で、ビューがアンロードされた状態ではありません。ありがとう。NSArraysUIViews

編集:私はこのような値を取得しますViewDidAppear

- (void)retrieveValues {

    labelsArray = newMailVC.bakcupLabelsArray;
    labelsDictionary = newMailVC.backupLabelsDictionary;
    senderEmailsDictionary = newMailVC.backupEmailsDictionary;

    NSLog(@"LABELS ARRAY COUNT ON RETRIEVE IS %i", labelsArray.count);
}

そして、これを初めて行うとすべてがOKですが、2回目にこれを行うNSLogと、配列に0個のオブジェクトが表示されます。

4

1 に答える 1

0

ほとんどの場合、newMailVC.bakcupLabelsArrayと他の2つは、それらの値を保持またはコピーするように設定されているプロパティではありません。arrayWithArray:およびdictionaryWithDictionary:これらのオブジェクトの自動リリースバージョンを作成するため、おそらくリリースされます。これが、後続のチェックでカウントが0になる理由です。

したがって、オブジェクトが消えないように、の[[alloc] initWithArray:]代わりにを使用して修正することもできます。arrayWithArray:2回目の設定の前にリリースすることを忘れないでください。

また、それらが可変配列および辞書であり、この操作を複数回実行する場合、なぜ毎回再初期化するのですか?コンストラクターでこれらのオブジェクトを初期化し、保存操作を実行しているときに、すべてのオブジェクトを削除して、配列から新しいオブジェクトを追加してみませんか。つまり、配列/辞書の内容を再初期化するのではなく置き換えます。これは、可変バージョンで実行できることです。

「bakcup」のつづりも間違っています。参考までに。

于 2013-02-15T14:35:04.723 に答える