我的 NSString 数据没有传输到视图控制器
Posted
技术标签:
【中文标题】我的 NSString 数据没有传输到视图控制器【英文标题】:My NSString data didnt tranfer over to a view controller 【发布时间】:2013-09-01 01:15:12 【问题描述】:在我的应用程序中,我使用的是导航控制器。我的问题是,当我转到上一个视图(使用生成的导航后退按钮)时,我的 NSString 数据不会传输过来。当我从导航控制器浏览堆栈时,我不知道如何保存这些 NSString 值。我需要发送一封包含这些 NSString 值的电子邮件。
这是我按下返回按钮之前的视图控制器
-(void)button
NSString *dd = @"text";
viewcontroller.string = dd;
这是按下后退按钮后的前一个控制器(视图控制器)
.h
@property (strong,nonatomic) NSString *string;
.m
NSString *emailBody = [NSString stringWithFormat:@"%@ ", string];
另外,我发现这个问题与我的情况相似,我围绕它来模拟我的问题。 UITextField contents are empty after popViewControllerAnimated 如果有人可以查看它并了解您如何将其应用于我的情况,我将不胜感激。
【问题讨论】:
【参考方案1】:您应该使用delegation:较早的(概述)控制器(您导航回的那个)应该实现详细视图控制器定义的协议。较早的控制器将在呈现之前将自己设置为详细控制器的委托。当被呈现并从细节控制器导航回概览控制器即将发生时,细节控制器可以在概览控制器被解除之前通知(也就是发送包含字符串作为参数对象的消息)概览控制器。
【讨论】:
对不起,我对委派有点菜鸟。您可以使用我的代码(或类似代码)提供示例吗?我将非常感激它,但是如果这需要您花费太多时间,您不必这样做。我会研究它,但可能需要一段时间才能弄清楚。 我这里是凌晨 5 点。所以如果我明天找到对你有用的代码,我会看看。但是对于您的代码而言,您的详细控制器知道前一个控制器。这似乎是一种相互依赖,你应该尽一切努力避免它。通过委托,只有概览控制器会知道细节控制器。而细节控制器只知道通信合同——它的委托履行的协议。【参考方案2】:我同意 vikingosegundo 的观点,委派是处理这个问题的最佳方式。我建议你阅读这篇文章:click here
但有出路,
在您的子视图控制器中:
- (void)viewDidLoad
[super viewDidLoad];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
self.navigationItem.leftBarButtonItem = backButton;
- (void) goBack:(id)sender
NSArray *vcs = self.navigationController.viewControllers;
id parentVC = [vcs objectAtIndex:[vcs count] - 2];
if ([parentVC respondsToSelector:@selector(getStringFromChildVC:)])
[parentVC getStringFromChildVC:@"text"];
[self.navigationController popToRootViewControllerAnimated:YES];
在您的父视图控制器.h 文件中:
-(void)getStringFromChildVC:(NSString *)myString;
和.m文件
-(void)getStringFromChildVC:(NSString *)myString
self.string = myString;
就这样吧..不过还是建议大家学习一下委托。
【讨论】:
以上是关于我的 NSString 数据没有传输到视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollViews 不会滚动到我的应用程序结构的顶部