在Objective C中声明项目范围变量

时间:2013-06-04 23:43:53

标签: ios appdelegate

我想知道是否有办法声明一个项目范围的变量,就像你用UINavigationController启动一个应用程序时那样,你可以从应用程序的任何地方调用该导航控制器,因为它是如何在应用程序中声明的

我想创建一个项目(全局)var,允许我调用SVProgress hud或从我的应用程序中的任何地方解除它。我有这个问题,我将UIViewController加载到导航堆栈,启动SVProgress hud然后向我的数据库发出请求..如果我收到错误,我需要处理一些事情,其中​​一个是能够解决SVProgress hud。

这是我到目前为止的代码

AppDelegate.h

#import "SVProgressHUD.h"

@interface MYAPPAppDelegate : UIResponder <UIApplicationDelegate> {
//..
}

@property (strong, nonatomic) SVProgressHUD *svprogressHud;

AppDelegate.m

@synthesize svprogressHud;

不确定这是否有可能希望有人可以帮助我。

这是SVProgress git的link

3 个答案:

答案 0 :(得分:2)

您可以从视图控制器执行的一项操作是获取应用委托并将其转换为您的委托类型,如下所示:

#import "MYAPPDelegate.h"
MYAPPDelegate *ad = (MYAPPDelegate *)[[UIApplication sharedApplication] delegate];
[ad.svprogressHud displayOrWhatever];

不是最干净但是应该完成工作。

答案 1 :(得分:1)

只是扩展Roberts的答案,为了避免重复代码获取app委托,然后将其转换为MYAPPDelegate,我将在项目中使用实用程序函数创建一个头文件/类。

创建名为AppUtils.h

的新标头
#import "MYAPPAppDelegate.h"
#ifndef AppName_AppUtils_h
#define AppName_AppUtils_h

static inline MYAPPAppDelegate* AppDelegate() {
    return (MYAPPDelegate *)[[UIApplication sharedApplication] delegate];
}

#endif

如果您需要访问这些变量,请导入标头AppUtils.h并使用辅助函数。例如:

#import "AppUtils.h"

...

- (void)foo {
    // use app delegate
    UIViewController *rootVC = AppDelegate().rootViewController;
}

答案 2 :(得分:1)

只需将头文件名添加到<projectname>_Prefix.pch

内的预编译头文件(#ifdef __OBJC__)中

喜欢:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "SVProgressHUD.h"
#endif

然后它将允许您访问所有文件中的文件.....