我有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/