2013-11-22 44 views
-1

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

我有ViewControllerB,我有一个Picker,然后是一个Textfield。我试图从ViewControllerA中加载Picker与数组,以便他们可以选择一个部分,然后通过文本字段添加一个新的项目到该部分。

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

TL;博士如何设置一个选择器的数据源来是已位于不同的视图控制器的阵列?

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

+0

是否viewControllerB被ViewControllerA推? – FabKremer

+0

这是一个非常基本的问题,并回答了许多其他地方。它没有说明对这个问题的最低限度的理解。 – Holly

+0

在推送viewControllerB时将数组赋值给目标viewControllerB对象。使用委托时,新项目在ViewControllerB – suhit

回答

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]; 
+0

补充的是,甚至不会编译更新viewcontrollerA阵列。您需要使用正确的类名称,并且在构造函数中还有一对方括号,并且在实例变量赋值前有一个随机方形b。 –

1

如果使用多个视图控制器NSUserDefaults的使用同一阵列

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

0

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

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

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

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

相关问题