【问题标题】:How can I access data that's stored in my App Delegate from my various view controllers?如何从各种视图控制器访问存储在我的 App Delegate 中的数据?
【发布时间】:2010-06-06 12:01:02
【问题描述】:

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

appdelegate.m

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

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

rootviewcontroller.m

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

这是最好的方法,还是有什么理由我应该以更好的方式组织我的数据?我之所以这么问,是因为我对使用全局变量总是不太适应(我责怪我的大学教授),尽管我不确定这是否可以被视为全局变量。

非常感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c cocoa ipad


    【解决方案1】:

    我了解 ApplicationDelegate 反对成为最佳管理场所 我的应用程序的全局数据, 对吗?

    不是真的(你的大学教授说得有道理)。开始将大量内容放入应用程序委托中是很诱人的,但这不是一种非常可持续的做法。见my answer here

    阅读 Matt Gallagher 的 this good post 以获得更多深度。

    也就是说,我经常在我的应用委托标头中放置这样的内容:

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

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

    int n = [[APP_DELEGATE sectionTitles]count];
    

    【讨论】:

    • 我专门登录了,所以我可以投票。我真的认为应用程序委托对于全球数据来说是一个糟糕的地方。我倾向于使用单例来处理类似的事情。
    【解决方案2】:

    这应该可行:

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

    【讨论】:

    • 谢谢,这样我就不用在每个视图中跟踪对我的应用委托的引用了。好建议!
    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    相关资源
    最近更新 更多