我曾经在appdelegate中声明了变量,并使其在所有类中都是可共享的(如果变量是全局的)。
appDelegate = (StoryAppDelegate*)[[UIApplication sharedApplication]delegate];
这是我正常使用的代码来访问appdelegate变量。现在我正在尝试一个故事板应用程序,它不适合我。在声明appdelegate时,它显示错误"未知类型名称StoryAppDelegate"。
StoryAppDelegate*ss;
这是我正在使用的代码。
任何帮助表示感谢。
答案 0 :(得分:1)
只是不要使用app delegate。这不是它的用途。
相反,创建一个特定的类来拥有责任+知识,使它成为一个单例,并让所有需要它的类通过它的'sharedController'(或任何你称之为)类方法来获取它。
或者使用带有静态变量的“常量”文件(不是应用委托)。
答案 1 :(得分:1)
故事板仅用于设计,而不是代码的更改。
为此,你可以使用:
AppDelegate *app;
在视图控制器的头文件中。
在实施文件中,
app=(AppDelegate *)[[UIApplication sharedApplication]delegate];
然后你可以使用app.yourVariable
答案 2 :(得分:0)
似乎是循环依赖的情况。
使用@class StoryAppDelegate;
而不是
#import "StoryAppDelegate.h"
在你的头文件中。
答案 3 :(得分:0)
我建议使用全局变量的单例实例,因为它们已经多次保护我的确切情况。这是我目前用来实现单例的一个例子。这种方法也是ARC安全的
mySingleton.h
#import <Foundation/Foundation.h>
@interface mySingleton : NSObject {
}
+ (NSMutableDictionary *) myMutableDict;
@end
mySingleton.m
#import "mySingleton.h"
@implementation mySingleton
+ (NSMutableDictionary *)myMutableDict
{
static NSMutableDictionary *singletonInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singletonInstance = [[NSMutableDictionary alloc]init];
});
return singletonInstance;
}
@end
只要在所有视图控制器中包含mySingleton.h,您就可以通过[mySingleton myMutableDict]
访问数据。例如:[[mySingleton myMutableDict] setObject:myObject forKey:myKey];
这当然适用于任何对象类型。