Objective c 在VC和x27之间移动数据;它不工作了

Objective c 在VC和x27之间移动数据;它不工作了,objective-c,viewcontroller,Objective C,Viewcontroller,我知道我最近问了一个与此稍有相似的问题,但我将在几个小时后提交该项目,这是我唯一剩下的bug 在第一个VC中: - (void)textViewDidEndEditing:(UITextView *)textView { SecondViewController *theVCMover = [[SecondViewController alloc] init]; //I imported the .h file theVCMover.rawUserInput = textView.te

我知道我最近问了一个与此稍有相似的问题,但我将在几个小时后提交该项目,这是我唯一剩下的bug

在第一个VC中:

- (void)textViewDidEndEditing:(UITextView *)textView {
SecondViewController *theVCMover = [[SecondViewController alloc] init]; //I imported the .h file

    theVCMover.rawUserInput = textView.text;
    //If I put an NSLog of theVCMover.rawUserInput here, it works and displays the string

    theVCMover.hexOrBinIndex = hexOrBin.selectedSegmentIndex; //same problem here
在第二个VC中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog (@"Bt-dubs, the moved text is %@", rawUserInput); //is (null) here
    CleanerText.text = rawUserInput; //CleanerText is a TextView
}
我无法将用户在第一个VC中输入的文本移动到第二个VC。我尝试过调试,vcmover.rawUserInput已初始化,它确实收到textView.text并在第一个VC中成功保存,但在移动到第二个VC时丢失,并在那里显示为(null)。我在晚上尝试了很多不同的方法,每个都有自己的死胡同……但这一个相当简单,所以我想在我未来的项目中使用它


另外,一开始我太在意移动的字符串在按下第二个选项卡(第二个VC)后显示,但现在我所关心的只是成功地移动那该死的字符串。永远的感谢

这是一个范围问题吗?您尚未在theVCMover.hexOrBinIndex分配后显示代码。大概这就是你显示第二个VC的地方(比如你推它或其他东西)。否则,当textvewDidEndEditing退出时,VCMover将超出范围,并且在实际加载视图时,您所做的更改将丢失。您可以先记录vcmover,然后在viewDidLoad中记录“self”,它们应该是同一个对象。如果它们不是您已加载的视图,也不是您初始化的视图

如果要将文本推送到选项卡栏中已存在的视图控制器,则不应在该
textViewDiEndediting
方法中初始化新的视图控制器。您应该在VC中更改选项卡栏已有的文本

// Not nice code because it uses magic numbers and fixed locations of view
// controllers in the tab bar
- (void)textViewDidEndEditing:(UITextView *)textView {
  // Assumes the SecondViewController is the second tab on the tab bar controller
  SecondViewController *theVCMover = [self.tabBarController.viewControllers objectAtIndex:1]; 

  theVCMover.rawUserInput = textView.text;
  theVCMover.hexOrBinIndex = hexOrBin.selectedSegmentIndex;
  .....
}

希望这能有所帮助。

您能展示执行到第二个视图控制器的转换的代码吗?从SecondViewController实例开始就是这样……我还需要编写更多代码来执行转换吗?在第一个代码块中,您创建了一个
SecondViewController的实例,并将其分配给局部变量(
theVCMover
)。你在哪里执行这个过程,或者把它推到导航控制器上,或者做任何你需要做的事情来使vcmover出现?我想我不需要…那么我怎么把它推到导航控制器上(这里的标签栏)?哦,这是一个标签栏控制器。。。好的-问题可能是您正在SecondViewController的新实例中设置文本,而您应该在TabBarController引用的实例中设置文本。我会为你发布一个答案…是的,我刚刚意识到…我如何将我初始化的一个推到我正在打开的视图中?你可以只展示一个模态VC-这将把新VC放在前一个VC之前,当你撤销新VC时,你将返回到另一个VC(查看presentModalViewController和dismissModalViewController)。或者,如果您有一个UINavigationController托管您的第一个VC,那么您可以在导航VC中使用pushViewController,希望这不是太简单,无法理解它的工作原理!我今天过得很好,真的,非常感谢!好的,在此过程中有几个小问题:我如何知道我的选项卡栏控制器的名称?它建议无论如何,但我检查了它的审查标签在故事板,并没有找到它。我应该在哪里编写每次按下选项卡时加载的代码,而不仅仅是第一次加载?再次非常感谢!我已将代码示例更新为
UIViewController
自动维护对父级
uitabarcontroller
的引用。要在每次按下选项卡时加载某些内容,您可以在传入视图控制器的
视图中将显示:
视图显示:
方法中执行该操作,或者为
UIAbbarController
设置委托,并实现
选项卡控制器:应选择视图控制器:
方法。另外,如果答案回答了你的问题,请接受它:-)非常感谢你…它看起来很简单;我不知道为什么人们会使用单件并使它复杂化。。。