【问题标题】:How to pass the value of a variable to the subview in iphone?如何将变量的值传递给iphone中的子视图?
【发布时间】:2010-02-10 18:03:13
【问题描述】:

我是 iphone 开发的新手。我正在为您创建管 RSS 提要。在第一个表格视图中,我在每个单元格中显示标题、发布的数据和图像。所有这些内容都是通过 XML 解析从 XML 页面中检索的。我还解析并检索了要显示的描述并将其存储在一个可变数组中。单击一行时,它导航到另一个表视图,我在其中详细显示所有内容(标题、日期、摘要)。我想在两个视图中使用相同的可变数组。我怎样才能实现它?或者我应该在子视图中再次解析 XML 文件以显示所有内容。请指导我。谢谢。

【问题讨论】:

  • 对您的问题的小修正:它不称为子视图,只是视图控制器。因为你可能会误解 UIView 的子视图的概念。

标签: iphone objective-c


【解决方案1】:

已编辑

您可能希望覆盖详细视图控制器上的 initWithNibName 方法。

 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withMutableArray: (NSMutableArray *) theArray withAnotherArray: (NSMutableArray *) theOtherArray{
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Here you should declare a local variable with the property & synthesize to store the array that is being passed
        myLocalArray = theArray;
        myOtherLocalArray = theOtherArray;
    }
    return self;
}

记得在 .h 文件中声明这个方法,这样前一个控制器就知道它存在。

祝你好运。

【讨论】:

  • 如果我有 2 个可变数组,哪个数组将作为参数传递给这个方法
  • +1 用于提供代码,但值得注意的是,这种方法不应该用于很多实例变量(你不想说initWithNibName:bundle:withArg:withArg:withArg:withArg:...)。如果要初始化的变量不止一两个,请考虑提供单独的设置方法,或传递数据结构或包装对象。
  • 是的,我还没有向他解释这种方法只有在控制器确实需要这些变量才能正常工作时才有用。因此,将它们放在 init 方法中会很有帮助。否则,您可以像往常一样简单地将变量传递给控制器​​;)或者如您所说;)感谢分享
【解决方案2】:

您可以对第二个视图进行子类化,添加一些实例变量,并在创建要推送的视图时设置它们。传递您已经为第一个表视图解析的任何内容,然后传递您还没有的任何信息,只需在第二个视图中再次解析即可。

或者,您可以使用 Core Data 并传递一个托管对象上下文来为您的整个应用程序提供一个持久的数据后备存储。不过,这可能需要更多的工作。

【讨论】:

    【解决方案3】:

    如果你有一个按钮调用:

    PickerViewController *pvController = [[PickerViewController alloc] init];
    pvController.hidesBottomBarWhenPushed = YES;
    pvController.BrillianMustache = BrilliantMustache;
    pvController.passedVariable = BrilliantMustache.varToPass;
    [self.navigationController pushViewController:pvController animated:YES];
    [pvController release];Initialize the variable in the receiving view.
    

    那么你必须有 BrilliantMustache(在这种情况下是一个核心数据实例),并在接收视图 (pvController) 中创建并合成了传递的PickerVariable。

    然后在vewDidLoad

    - (void)viewDidLoad {
        NSLog(@"%@",self.passedVariable);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2016-04-12
      • 2015-12-23
      • 2012-12-19
      • 2021-04-30
      • 2020-07-11
      • 2015-09-12
      • 2023-03-14
      相关资源
      最近更新 更多