【问题标题】:ios Delegate Objective-c data sending from 2nd view controller to 1st view controllerios 将 Objective-c 数据从第二个视图控制器发送到第一个视图控制器
【发布时间】:2016-12-22 06:35:14
【问题描述】:

我有 2 个视图控制器。第一个是 UIview 控制器,第二个是表视图控制器。 在选择第二个视图控制器的行后,我想将数据第二个(表视图控制器)发送到第一个(uiview 控制器)。 为此,我编写了一个委托协议。 但是我的委托协议不起作用...... 我发现了问题。我正在创建的第二个视图控制器的对象。

address = [[second_viewcontroller alloc] init];
address.delegate = self;

与 second_viewcontroller 视图控制器页面的 self 不同。 如何使这两个相同。

self = [[second_viewcontroller alloc] init];

【问题讨论】:

  • 您无需创建委托即可将数据从一个控制器传输到另一个控制器。
  • 用户NSUserDefaults,你可以轻松搞定
  • 您是如何从第一个视图推送到第二个视图的,您可以给我看一下代码,以便我可以帮助您吗?
  • 非常好的尝试解决方案stackoverflow.com/questions/33748950/…
  • Manzoor 兄弟请查看上面的链接。我使用 Notification 和 Custom Delegate 将数据从 SecondViewController 传递到 FirstViewController。效果很好。

标签: ios objective-c delegates


【解决方案1】:

是的,因为您实例化了第二个视图控制器的新实例。从你的问题中我可以看出,我想如果你从导航堆栈中获取你的 secondViewController 的实例,它应该可以工作

【讨论】:

  • 先生,如何从导航堆栈创建实例
【解决方案2】:

我为您创建了一个示例项目,以了解如何使用 NSUserDefaults 向后传递数据的基本知识。在GitHub 试试这个。希望这对你有帮助。项目地址Pass data backward using NSUserDefaults in Objective-C

【讨论】:

  • 我认为使用NSUserDefaults 将一个视图控制器值传递给另一个视图控制器值不是一个好习惯,因为您需要使用Delegate 或通过属性。
  • 它是因为我们在NSUserDefaults 中存储敏感数据(例如用户详细信息)或少量数据,但是要将一个类数据传输到另一个类,我们有很多选择,所以最好使用那个替换使用NSUserDefaults.
  • 在上面的问题中没有提到任何敏感数据,他只是要求向后传递数据@Dhanesh
  • 是的,但他提到他想将一个 Class 数据传递给另一个 Class,因此最好使用 Delegate,这只是实践中的一个建议,所以我在这里评论就是这样。跨度>
【解决方案3】:

您的问题我的委托协议不起作用...我发现了问题。我正在创建的第二个视图控制器的对象。地址=[[second_viewcontroller alloc]init];地址.delegate=自己;与 second_viewcontroller 视图控制器页面的 self 不同。

很明显,您创建 second_viewcontroller 对象的方式是不对的。

您必须从 ViewController 故事板标识符创建对象。 首先将 Storyboard ID 从 Storyboard 提供给 ViewController。按照此步骤提供 Storyboard ID。

  1. 在 Storyboard 中选择特定的 ViewController。
  2. 转到 IdentityInspector。
  3. 在 IdentityInspector 下,有标识部分,并在“Storyboard ID”字段中添加 Storyboard ID。

创建 ViewController 对象的语法。

Second_viewController *aVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Second_viewController"];
aVC.delegate = self;

【讨论】:

  • UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Reservation" bundle:nil]; reservationTableViewController *aVC = [storyboard instantiateViewControllerWithIdentifier:@"hotel_addreess"]; NSLog(@"%@address",aVC);
  • 您是否检查过委托是否正在使用此代码?如果不能,您可以发布您的代码,说明如何创建委托以及您在哪里使用?
【解决方案4】:

我假设您是从情节提要中调用 Second_ViewController 而不是以编程方式进行。

在这种情况下,可以在 prepareForSegue 中访问正确的 Second_ViewController 实例。为此,您需要设置 Storyboard segue 标识符,例如“Second_ViewController”

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"Second_ViewController"]) {

        SecondViewController *aSecVC = segue.destinationViewController;
        // Register the Delegate to self.So when we call the delegate method from secondVC, SendMessage will be call of ViewController
        aSecVC.delegate = self;

    }
}

如果你使用 alloc-init 或 instantiateViewControllerWithIdentifier,当你使用 storyboard push segue 时,它​​会创建另一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多