我有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;
但为什么会这样呢? (因为我没有将数组返回到我的第一个视图)。
答案 0 :(得分:2)
第二个视图控制器的arrayFields是对第一个视图控制器的强引用。它通过引用传递,而不是作为副本传递。在ViewControllerOne的next
方法中,将lvc.arrayFields = self.arrayFields;
更改为lvc.arrayFields = [self.arrayFields copy];