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,因为NSArrays包含UIViews并且我想将数组转移到另一个视图,在我按下按钮并使用上述方法保存它们时的状态,而不是视图卸载的状态。谢谢。

编辑:我检索这样的值ViewDidAppear

- (void)retrieveValues {

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

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

当我第一次这样做时,一切都很好,但是当我第二次这样做时NSLog,我的数组中有 0 个对象。

4

1 回答 1

0

很可能 newMailVC.bakcupLabelsArray 和其他 2 个不是设置为保留或复制其值的属性。arrayWithArray: 和 dictionaryWithDictionary: 创建这些对象的自动发布版本,因此它们可能会被释放,这就是为什么在后续检查中您的计数为 0。

所以你也可以通过使用[[alloc] initWithArray:]代替来修复arrayWithArray:,这样对象就不会消失。只是不要忘记在设置第二次之前释放。

此外,如果它们是可变数组和字典,并且您将多次执行此操作,为什么每次都重新初始化?为什么不在构造函数中初始化这些对象,然后在执行保存操作时从数组中删除所有对象并添加新对象。即,替换数组/字典的内容而不是重新初始化它,这就是可变版本允许您执行的操作。

“bakcup”也拼错了,仅供参考。

于 2013-02-15T14:35:04.723 回答