gpt4 book ai didi

ios - 在没有 iVar 的情况下将数据传递到 segue 目的地

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:09:09 27 4
gpt4 key购买 nike

自从切换到 Storyboard后,我通过以下方式加载了一个 View Controller

[self performSegueWithIdentifier:@"identifier" sender:self]

这非常有效。现在,如果我想在目标 View Controller 上设置任何属性,我将实现方法 prepareForSegue:sender: 并设置我需要设置的属性。一切都按预期工作,没有任何问题。

自从我开始使用这种方法取代旧的

MyViewController *vc = ....
vc.prop = @"value";
[self.navigationController pushViewController:vc];

我觉得将参数传递给目标 View Controller 有点麻烦,特别是如果您尝试设置的值不仅仅是一个静态值。

例如,我有一个按钮可以从服务器获取一些数据。当数据返回时,它创建一个新对象,然后呈现一个新的 View Controller 来显示这个对象。为此,我调用了 performSegueWithIdentifier:sender:,但到此为止。我的对象现在被释放并且不再存在,我无法将它传递给 prepareForSegue:sender: 方法,除非我将它存储在实例变量中。

这感觉很糟糕,因为该对象的持续时间不超过此操作,并且与我当前 View Controller 中的任何其他对象都没有关系。

在这种情况下,我知道我可以非常简单地请求新 View Controller 中的数据,但这只是一个示例。

我的问题是,是否有另一种方法可以做到这一点而又不会让人感觉很笨拙?我可以将这些数据放入目标 View Controller 而不将其存储在实例变量中吗?

我知道我仍然可以使用旧方法,但如果可以的话,我想坚持使用 Storyboard方法。

最佳答案

performSegueWithIdentifier:sendersender 参数与 prepareForSegue:sender 接收的参数相同。因此,如果您想将变量发送到您的 prepareForSegue:sendersender 就是您的 friend 。在你的情况下:

SomeViewController.m

-(void)aMethodThatDownloadsSomeDataFromServer {
NSString *exampleData = [self someDataThatIDownloaded];
[self performSegueWithIdentifier:@"yourSegueIdentifier" sender:exampleData];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if(segue.identifier isEqualToString:@"yourSegueIdentifier"]) {
if([sender isKindOfClass:[NSString class]]) { //maybe you want to send different objects
segue.destinationViewController.stringProperty = sender;
}
else {
segue.destinationViewController.objectPorperty = sender;
}
}
}

关于ios - 在没有 iVar 的情况下将数据传递到 segue 目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com