如何在多个Views / XIB之间共享变量

时间:2012-01-18 22:23:07

标签: iphone objective-c xcode

我已经阅读了几个类似的主题,但似乎无法弄清楚这一点 - 抱歉。 我有一个包含多个视图的项目,包括一个ViewController,几个“子”视图和一个NavigationController。我想要一个可以从任何视图访问的数组,这样我就可以填充TableView或TextField等。我希望这个数组可以从任何可以访问它的View中修改。

现在我在xxAppDelegate.h文件中有这个:

NSMutableArray *listOfHeadings;
@property (strong,nonatomic) NSMutableArray *listOfHeadings;

在xxAppDelegate.m文件中我填充了数组:

listOfHeadings = [[NSMutableArray alloc] init];
[listOfHeadings addObject:@"Heading 0"];
[listOfHeadings addObject:@"Heading 1"];

但我似乎无法从其他.m文件访问该数组。 我该如何正确地做到这一点?

3 个答案:

答案 0 :(得分:1)

由于您将数组放在xxAppDelegate中,因此您可以从任何其他类访问您的数组:

#import "xxAppDelegate.h"
//...
NSMutableArray *array
= [(xxAppDelegate *)[[UIApplication sharedApplication] delegate] listOfHeadings];

答案 1 :(得分:1)

虽然您可以访问数组的app delegate / root控制器属性,但这违反了封装原则。而不是定义所有子视图/控制器类将访问的单个属性,而是将数组传递给需要它的每个类(在内存中仍然只有一个数组,并且每个类将在适当的时间访问同一个数组) (例如,实例化)。

另一种选择是创建一个应用程序范围的单例类,以便为感兴趣的调用者提供数组。

答案 2 :(得分:0)

使用当前的设计,您可以使用以下命令获取AppDelegate指针:

AppDelegate *dPtr = (AppDelegate *)[[UIApplication sharedApplication] delegate];

然后您可以使用以下属性访问您的数组:

[dPtr.your_array objectAtIndex:i];

但我强烈建议使用Singleton设计模式来管理您的全局对象。