NSMutableArray保存所有视图的所有值

时间:2015-11-12 22:15:26

标签: ios objective-c uiviewcontroller nsmutablearray

我有2个viewControllers,其中一个TableView在一行中包含一个textView。

ViewControllerOne.h / ViewControllerSecond.h (相同代码)

UIViewController<UITableViewDataSource, UITableViewDelegate, UITextViewDelegate>

@property (nonatomic, retain) NSMutableArray *arrayFields;

ViewControllerOne.m

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSString *searchStr = [textView.text stringByReplacingCharactersInRange:range withString:text];

    self.arrayFields[0] = searchStr;

    return YES;
}

ViewControllerSecond.m

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        NSString *searchStr = [textView.text stringByReplacingCharactersInRange:range withString:text];

        self.arrayFields[1] = searchStr;

        return YES;
    }

当app运行时,ViewControllerOne被打开,我在textView中写了一个文本,现在转到ViewControllerSecond我按下导航栏中的一个按钮:

-(void)next{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    ViewControllerSecond *lvc = [storyboard instantiateViewControllerWithIdentifier:@"profileToHome4"];
    [self setAnimation];
    lvc.arrayFields = self.arrayFields;
}

使用此代码,我可以将我的数组传递给下一个视图。当下一个视图出现时,我可以在另一个textView中写一个文本。大!让我们点击导航栏中存在的后退按钮,返回我的ViewControllerOne:

- (IBAction)back:(id)sender{
    [self.navigationController popViewControllerAnimated:NO];
}

在我的ViewControllerOne中,我的导航栏中有一个保存按钮,当用户按下此按钮时,控制台会显示我的数组内的内容......但很奇怪...当我这样做时,我可以看到2个索引有两个文本!

在我看来,当我弹出我的ViewControllerSecond时,arrayFields将dealloc并且索引1从未存在过,当我按下ViewControllerOne中的保存按钮时,正确的是:

  

&#34;文字1&#34;

  

&#34;文字1&#34; &#34;文字2&#34;

但为什么会这样呢? (因为我没有将数组返回到我的第一个视图)。

1 个答案:

答案 0 :(得分:2)

第二个视图控制器的arrayFields是对第一个视图控制器的强引用。它通过引用传递,而不是作为副本传递。在ViewControllerOne的next方法中,将lvc.arrayFields = self.arrayFields;更改为lvc.arrayFields = [self.arrayFields copy];