【问题标题】:Passing the values between view controllers in iOS 7在 iOS 7 中的视图控制器之间传递值
【发布时间】:2014-08-07 07:19:58
【问题描述】:

情况是这样的。我有 3 个视图控制器,分别命名为 ABC

我正在从 A 导航到 B 并传递一些字符串,将其称为 receivedMember

B 中,当我写 NSLog(@"Name is %@", _receivedMember); // 它打印从 A

传递的值

然后从 B 导航到 C 并再次返回到 B。所以当我回到B时,我检查了name的值。它是null

  -(void) viewDidAppear:(BOOL)animated{

     NSLog(@"DID APPEAR %@\n", _receivedMember);   // (null)
    }

    -(void) viewWillAppear:(BOOL)animated
    {
       NSLog(@"WILL APPEAR %@\n", _receivedMember); // (null)
    }

编辑这是代码

在 A 类中,A ---> B

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"searchpage"])
    {
        B *cl = segue.destinationViewController;

        cl.receivedMember = strMemberType;

    }
}

我从 pickerview 获取strMemberType

-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{

        strMemberType = [memberTypeArray objectAtIndex:row];

}

在 C 类中,C ---> B

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"backToSearchSegue"])
    {
        B *cs = segue.destinationViewController;
    }
}

B.h

@property (nonatomic, copy) NSString *receivedMember;

当我从C返回B时,我怎样才能得到相同的值。?我对iOS很天真,所以请帮助我。无论如何我可以将它们存储在缓存文件中吗?这样我就可以在任何课程中访问它。

【问题讨论】:

  • 使用单例或应用委托代理方法
  • 能否给一些链接或者写代码?我对 iOS 很天真。
  • 一旦签入 B 类,有些地方你正在清除 _name 中的数据。
  • @Sunny 不,我没有清除任何东西。
  • 或者您可以简单地使用 NSUSerDeafults...当您从 B 切换到 C 时保存价值..并在 C 中再次检索到 B 的 ViewWillAppear

标签: ios objective-c navigation


【解决方案1】:

iOS中使用的数据传递方法有几种,

示例 1。

AppDelegate

使用此链接How to pass data from AppDelegate to ViewController?

示例 2:

NSObject 类方法

使用此链接Sending data from one ViewController to another.

示例 3:

使用segue方法。

使用此链接ios which is the best way to pass data from one viewcontroller to another . through singleton class or *.h file?

示例 4:

单例类方法

使用这个http://klanguedoc.hubpages.com/hub/iOS-5-How-To-Share-Data-Between-View-Controllers-using-a-Singleton

示例 5:

NSUserDefaults

使用此链接:Pass data from one ViewController to another ViewController using NSUserdefaults

【讨论】:

  • 如果您需要更多帮助,我会帮助您,
【解决方案2】:

您必须使用NSUserDefaultSingleton 来处理跨各种控制器的变量值。

这两者都用于需要跨多个视图控制器维护和访问变量值的场景。您可以根据自己的选择选择其中一个。 NSUserDefault 可以存储多个键值对,可在整个应用程序中全局访问。 Singleton 可以帮助您创建一个静态的对象/变量,因此之后不会创建它的其他实例。整个应用程序只保留一个实例。

以下链接可能对您有所帮助。

Singleton Tutorial

Another Singleton Guide

NSUserDefault Tutorial

Another NSUserDefault Tutorial

希望这会有所帮助!

【讨论】:

  • 谢谢,我会查看链接并回复您。
  • 我已经更新了代码,你可以看看吗?
【解决方案3】:

当您从 C 返回到 B 时,基本上您会在内存中创建另一个 B 实例,这与您从 A 来时所拥有的不同。删除后退按钮上的 sgeue pushviewcontroller 只需在后退按钮 IBAction 单击时键入以下内容。

[self.navigationController popViewControllerAnimated:YES];

它将带您到您从 A 来时拥有的 B,并且在 viewWillAppear 上您的价值将保持在那里

每当你推送你的 viewControllers 时,它都会被添加到 self.navigationalController ViewControllers 数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多