如何从各种视图控制器访问存储在App Delegate中的数据?

时间:2010-06-06 02:28:27

标签: iphone objective-c cocoa ipad

这个问题类似于this other post,但我是iPhone开发的新手,我已经习惯了在整个应用程序中组织数据的良好做法。我理解ApplicationDelegate对象是管理我的应用程序全局数据的最佳位置,对吗?如果是这样,我如何从各种视图控制器访问存储在我的App Delegate中的数据?例如,我的数组是在app delegate中创建的......

appdelegate.m

sectionTitles = [[NSArray alloc] initWithObjects: @"Title1", @"Title2", @"Title3", nil];
rootViewController.appDelegate = self;

我需要在我的应用程序的不同视图中访问它,比如我的根表视图控制器......

rootviewcontroller.m

NSUInteger numTableSections = [self.appDelegate.sectionTitles count];

这是最好的方法吗?还是有任何理由我应该以更好的方式组织我的数据?我问,因为我永远不会对使用全局变量感到太满意(我责怪我的大学教授),尽管我不确定这是否可以被视为全局变量。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

  

我理解ApplicationDelegate   对象是最好的管理场所   我的应用程序的全局数据,   正确的吗?

不是真的(你的大学教授有一点意见)。很有可能开始将大量内容放入应用代表中,但这不是一种非常可持续的做法。请参阅my answer here

请阅读Matt Gallagher的this good post以获得更深入的内容。

那就是说,我经常把这样的东西放在我的app delegate标题中:

#define APP_DELEGATE (MyAppDelegate*) [[UIApplication sharedApplication] delegate]

所以我可以轻松地做以下事情:

int n = [[APP_DELEGATE sectionTitles]count];

答案 1 :(得分:1)

这应该有效:

self.appDelegate = ( YourApplicationDelegate *) [[UIApplication sharedApplication] delegate];