我有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;
    }

当应用程序运行时,将打开ViewControllerOne并在textView中写入文本,现在要转到ViewControllerSecond,请按一下NavigationBar中存在的按钮:
-(void)next{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    ViewControllerSecond *lvc = [storyboard instantiateViewControllerWithIdentifier:@"profileToHome4"];
    [self setAnimation];
    lvc.arrayFields = self.arrayFields;
}

使用此代码,我可以将数组传递到下一个视图。当出现下一个视图时,我可以在另一个textView中写入文本。大!让我们单击我的navigationBar中存在的后退按钮以返回到ViewControllerOne:
- (IBAction)back:(id)sender{
    [self.navigationController popViewControllerAnimated:NO];
}

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

在我的脑海中,当我弹出ViewControllerSecond时,arrayFields将取消分配并且索引1永远不存在,并且当我在ViewControllerOne中按下保存按钮时,正确的方法是:

“文字1”

不:

“文本1”“文本2”

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

最佳答案

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

关于ios - NSMutableArray保存所有 View 的所有值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33682458/

10-14 23:40