我已经阅读了几个类似的主题,但似乎无法弄清楚这一点 - 抱歉。 我有一个包含多个视图的项目,包括一个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文件访问该数组。 我该如何正确地做到这一点?
答案 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设计模式来管理您的全局对象。