我有一个我在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)相关的基本答案。谢谢!
答案 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风格 - 前一种方法更好,因为它更容易理解应用程序的流程。