Objective-C (iOS) : prepareForSegue won't pass my data into destination VC

标签 objective-c ios xcode

VC1 = NewGameViewController
VC2 = GameViewController

NewGameViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if( [segue.identifier isEqualToString:@"newGameSegue"]) {
    GameViewController *gameVC = (GameViewController *)segue.destinationViewController;

    NSArray *array = [self nameArrayForTextFieldArray:self.namePicker.textFieldArray withColon:YES];
    gameVC.nameArray = [[NSArray alloc] initWithArray:array];
}

-(NSArray *)nameArrayForTextFieldArray:(NSArray *)array withColon:(BOOL *)bool 给定一个 nsarray 的文本字段,基本上返回一个 nsarray 的字符串。 withcolon 是一个 bool 值,表示您是否希望字符串末尾附加一个冒号。

当我调试我的代码时,gameVC 中的 _nameArray ivar 在调用这里的每一行之后仍然读取 nil...有人能帮我吗??

最佳答案

当即将执行从一个屏幕到另一个屏幕的转场时,UIKit 会调用 prepareForSegue 方法。它允许我们在显示之前将数据提供给新的 View Controller 。通常你会通过设置它的属性来做到这一点。

新的 View Controller 可以在 segue.destinationViewController 中找到。如果 GameViewController 嵌入了导航 Controller ,则新的 View Controller 将不是 GameViewController,而是嵌入它的导航 Controller 。 要获取 GameViewController 对象,我们可以查看导航 Controller 的 topViewController 属性。此属性指的是当前在导航 Controller 中处于事件状态的屏幕。

要将对象发送到新的 View Controller ,您可以使用此解决方案使用 performSegueWithIdentifier:

例如,如果我们想在按下 UIButton 时执行一个 segue,我们可以这样做:

MyViewController.h 中,我们创建一个 IBAction(连接到 UIButton),将按钮从 Storyboard拖到代码中:

- (IBAction)sendData:(id)sender;

MyViewController.m中我们实现了方法:

- (IBAction)sendData:(id)sender
{
    NSArray *array = [self nameArrayForTextFieldArray:self.namePicker.textFieldArray withColon:YES];
    [self performSegueWithIdentifier:@"newGameSegue" sender:array];
}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"newGameSegue"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        GameViewController *controller = (GameViewController *)navigationController.topViewController;
        controller.nameArray = sender;
    }
}

关于 Objective-C (iOS) : prepareForSegue won't pass my data into destination VC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322431/

相关文章:

objective-c - 无法将文件从包复制到文档目录,为什么 fileExistsAtPath 返回错误?

objective-c - 添加到主页功能

ios - 从 NSMutableArray 中删除重复项,并在 'for' 循环中添加对象

swift - 在 ViewController 和 SwiftUI 之间共享变量

ios - UITableView和UISegmentedControl

ios - Tesseract CPU 使用率 100%

ios - 如果列存在则更改表,如果不存在则添加

ios - 应用内购买在模拟器上更改测试用户

objective-c - 使用 Objective C 从 CSV 文件创建数组

objective-c - 是否有适用于 iPad 2 的条码扫描仪 SDK?