iOS在多个ViewControllers中使用数组

时间:2013-11-22 18:59:29

标签: ios viewcontroller

我有一个我在ViewControllerA中创建的NSMutableArray,我用一个实例方法(在同一个.m文件中)用默认数据填充该数组。然后数组值成为我的tableView中的节标题。

我有ViewControllerB,其中我有一个Picker,然后是Textfield。我正在尝试使用ViewControllerA中的数组加载Picker,以便他们可以选择一个部分,然后通过文本字段向该部分添加一个新项目。

从ViewControllerA中提取数组数据并将其发送到ViewControllerB中的选择器的最佳方法是什么,这样当提交Pick + Textfield条目时,我可以使用匹配的Section中的New Item更新ViewControllerA表他们挑选了什么?现在,原始数组似乎包含在ViewControllerA的一个实例中,所以我假设我必须使这个数组更容易公开访问。

tl; dr如何将Picker的数据源设置为位于不同ViewController中的数组?

我一直是谷歌/堆叠,并且找不到任何与最新版本的Xcode(现在5.0.2)相关的基本答案。谢谢!

3 个答案:

答案 0 :(得分:1)

如果在多个视图控制器中使用相同的数组,请使用NSUserDefaults

NSMutableArray *mutableArray = [[NSUserDefaults standardUserDefaults]valueForKey:@"pickerArray"];

答案 1 :(得分:0)

让我们说这是你的viewcontrollerA并且它包含mutableArray arrayControllerA并且还包含一些值。所以将数组值传递给viewcontrollerB。您需要首先在viewcontrollerB中声明可变数组属性

在viewcontrollerB.h文件中

@property(nonatomic, strong) NSMutableArray 
  *arrayControllerB;

现在在viewcontrollerA.m文件中

UIViewController *secondViewController= 
[[[UIViewController alloc] 
initWithNibName:@"viewControllerBNibName"] 
  bundle:nil];
   [secondViewController.arrayControllerB=
  self.arrayControllerA
 [self.navigationController 
 pushViewController:myNewViewController 
 animated:YES];

答案 2 :(得分:0)

有几种不同的方法可以解决这个问题。正确的答案实际上取决于您的应用程序的结构,特别是两个不同的vcs如何实例化。

如果viewControllerA(主列表)是应用程序的主要vc而viewControllerB(选择器)是由其上的某个动作触发的,那么Hussain建议的方法应该工作 - 你只需要创建一个实例变量viewControllerB并在vcA上使用原始数组进行设置。

如果应用程序的结构更复杂,您可以将部分数据保存在某个其他对象(可能是更高级别的视图控制器或应用程序委托)的实例变量中,然后将其传递给vcA或vcB,只要其中一个其他是实例化的。

如果你使用appDelegate,你可以利用它的单例访问器([[UIApplication sharedApplication]delegate])虽然这可能不被认为是好的OO风格 - 前一种方法更好,因为它更容易理解应用程序的流程。