Objective c 从控制器向后移动到上一个控制器

Objective c 从控制器向后移动到上一个控制器,objective-c,xcode,uiviewcontroller,push,storyboard,Objective C,Xcode,Uiviewcontroller,Push,Storyboard,我正在尝试从UIViewController切换回UITableViewController,但它似乎没有按我希望的方式工作。 我确实从一开始就用故事板创建了我的界面,所以我并不真正喜欢通过代码从一个视图移动到另一个视图。到目前为止,我只是将我的视图按顺序推送,这很容易用故事板实现。但当我尝试返回到以前的视图时,将实现一个新的ViewController,因此我存储在旧视图中的所有数据都“丢失” 实际上,我无法向您展示任何代码(因为sergues),但情况是: ->我有一个可变数组在我的UITa

我正在尝试从UIViewController切换回UITableViewController,但它似乎没有按我希望的方式工作。 我确实从一开始就用故事板创建了我的界面,所以我并不真正喜欢通过代码从一个视图移动到另一个视图。到目前为止,我只是将我的视图按顺序推送,这很容易用故事板实现。但当我尝试返回到以前的视图时,将实现一个新的ViewController,因此我存储在旧视图中的所有数据都“丢失”

实际上,我无法向您展示任何代码(因为sergues),但情况是:

->我有一个可变数组在我的UITableView中存储东西

->用户点击扫描按钮,扫描一个应该导入到我的数组中的新项目

->当试图返回到我的tableView时,有一个新的控制器正在唤醒我,它不知道我存储在旧控制器中的数据

那么,我如何简单地回到我的旧控制器,以便始终创建一个新的控制器呢

sergue推送是否总是创建新控制器

(问题可能很简单,但我对这方面还不熟悉。尝试了搜索功能提供的一些结果,但都不起作用:()

/编辑:弹出问题已解决,但数组填充问题仍然存在。代码:

GeneralSettings *sharedGS = [GeneralSettings sharedInstance];
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString];
[sharedGS.listArray insertObject:strCheckString atIndex:0];
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN);
sharedGS.strEAN中的数据(“83274572354”即)
listArray中的数据(null)

您不会向后推。这会创建上一个控制器类的新实例。您可以向后弹出。您可以通过两种方式完成

1:在代码中,当您想要返回(pop)到tablet view controller时,请输入以下语句

[self.navigationController popViewControllerAnimated:是];

2:如果要在情节提要中执行此操作,则需要实现以下自定义segue类:

实施

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
[src.navigationController popViewControllerAnimated:YES];
}
和标题

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end
@T.J 什么时候采用这种方法 “2:如果要在情节提要中执行此操作,则需要实现以下自定义segue类:

实施”

并根据以下其中一项:, “在触发Segue时配置目标控制器 iOS在触发segue时执行以下任务:

它实例化目标视图控制器。 它实例化一个新的segue对象,该对象保存被触发segue的所有信息。 注意:popover segue还提供一个属性,用于标识用于控制目标视图控制器的popover控制器。 它调用源代码视图控制器的prepareforsgue:sender:方法,传入新的segue对象和触发segue的对象。 它调用segue的perform方法将目标控制器显示在屏幕上。实际行为取决于正在执行的segue的类型。例如,模式segue告诉源视图控制器显示目标视图控制器。 它释放segue对象,segue完成。“

它再次实例化显示的viewController,然后在调用“perform”的重写方法后解除锁定。因此,最好选择您提交的第一个方法或委托的方法


谢谢

谢谢!我使用第一个,因为为一个弹出式窗口创建一个新类会有点过大。但是我的数组仍然不能按预期工作…我查找了我的变量,我的数据就在那里(例如“432436274”)但是,当我尝试使用addObject或insertObject:atIndex cmd将其添加到数组中时,什么都没有发生。您也能帮我一下吗?代码如下:'GeneralSettings*sharedGS=[GeneralSettings sharedInstance];sharedGS.strEAN=[[NSString alloc]initWithString:strCheckString];[sharedGS.listArray insertObject:strCheckString索引:0];NSLog(@“Anzahl der EAN代码:%d\n主代码:%@\n在变量%@)、sharedGS.listArray.count、[sharedGS.listArray对象索引:0],sharedGS.strEAN)“代码格式不起作用,或者我做错了吗?”“MyCode”?您可以设置委托和委托协议,但更简单的方法是使用第二个选项。第二种方法非常简单-只需将我的代码复制到新的objective-c类中。然后在UIViewController中实现prepareForSegue方法并在目标视图上设置属性控制器(你的UITableViewController)。我将在上面五月份的答案中发布prepareforsgue方法。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"goBackToTableView"])  {
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}];
    }
}