ios - 将数据传递到 segue 目的地,无需 iVar

标签 ios objective-c cocoa-touch ivar

自从切换到 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 - 将数据传递到 segue 目的地,无需 iVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313283/

相关文章:

ios - UITextField shouldChangeCharactersInRange 没有检测到第一个字符

ios - 实现 3D Touch 预览时非常奇怪的 View 行为

iphone - 如何在 iPhone/Objective C 上找出 RSA 公钥的模数和指数

ios - Facebook SDK for iOS 访问 token 问题

iphone - 在没有互联网的情况下使用 iPhone GPS 更新用户位置

objective-c - 将时间戳转换为 nsdate 格式

objective-c - 检测自定义表格单元格内多个 UI View 的点击/触摸的理想方法是什么?

iphone - sqlite3_prepare_v2问题

ios - 使用自动布局以编程方式将 subview 添加到 UIView 时来源错误

iphone - 测试 NSURLConnection 与 HTTP 响应错误状态的使用