我想知道是否有一种方法可以像使用UINavigationController启动应用程序时那样声明项目范围的变量,并且可以从应用程序中的任何地方调用导航控制器,因为它是如何在应用程序委托中声明的。
我想创建一个项目(全局)变量,它允许我在应用程序中的任何地方调用SVProgress hud或取消它。我遇到这个问题,我将UIViewController加载到导航堆栈,启动SVProgress hud,然后向我的数据库发出请求。如果我得到一个错误,我需要处理一些事情,其中之一是能够批评SVProgress平显。
这是我到目前为止所拥有的代码
AppDelegate.h
#import "SVProgressHUD.h"
@interface MYAPPAppDelegate : UIResponder <UIApplicationDelegate> {
//..
}
@property (strong, nonatomic) SVProgressHUD *svprogressHud;AppDelegate.m
@synthesize svprogressHud;我真的不确定这是否可能,希望外面的人能帮助我。
发布于 2013-06-05 07:46:41
您可以从视图控制器中执行的一件事是获取应用程序委托,并将其强制转换为委托的类型,如下所示:
#import "MYAPPDelegate.h"
MYAPPDelegate *ad = (MYAPPDelegate *)[[UIApplication sharedApplication] delegate];
[ad.svprogressHud displayOrWhatever];不是最干净的,但应该能完成工作。
发布于 2013-06-05 10:31:05
只需将头文件名添加到#ifdef __OBJC__内的预编译头文件(<projectname>_Prefix.pch)中
如下所示:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "SVProgressHUD.h"
#endif然后,它将允许您访问所有文件中的文件.....
发布于 2013-06-05 09:06:50
只是扩展Roberts的答案,为了避免重复代码来获取应用程序委托,然后将其强制转换为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并使用helper函数。示例:
#import "AppUtils.h"
...
- (void)foo {
// use app delegate
UIViewController *rootVC = AppDelegate().rootViewController;
}https://stackoverflow.com/questions/16929258
复制相似问题