这对你们来说很简单。我正在定义一个存储变量的类,所以我可以在不同的ViewControllers中重用这些变量。
我是这样做的,它显然不起作用(这就是我问一个问题的原因......):
我宣布了一个班级:
VariableStore.h
@interface VariableStore : NSObject {
int evTe;
}
@property (nonatomic) int evTe;
+ (VariableStore *)shareInstance;
@end
VariableStore.m
@implementation VariableStore
@synthesize evTe;
+ (VariableStore *)sharedInstance {
static VariableStore *myInstance = nil;
return myInstance;
}
@end
现在在我的FirstViewController中我想设置evTe的值:
[[VariableStore sharedInstance] setEvte:2];
NSLog(@"value testing, %i", evTe);
不幸的是,这继续返回0,我m obviously missing something important here but I can't figure out what it is .
Later on I
想在FirstViewController中设置evTe的值,然后在SecondViewController中重用它。
答案 0 :(得分:4)
您正在将共享实例设置为nil,然后将其返回:
static VariableStore *myInstance = nil;
return myInstance;
nil实例不会保存您的变量。这是零。
首先,你不应该使用单例来传递变量。如果你打算这样做那么你也可以只使用全局变量(不要这样做)。其次,如果你坚持使用单身,你需要read up on how to use them。
最后,如果要在视图控制器之间传递变量,您需要另一个视图控制器,它是两者的父级,以便于在它们之间传递数据,或者需要调用另一个并获取第一个或其数据作为参数。
答案 1 :(得分:2)
好吧,你要求evTe的值而不调用它所属的对象。试试这个:
NSLog(@"value testing, %i", [[VariableStore sharedInstance] evTe]);
如果您多次使用单身人士,您可能希望这样做:
VariableStore *vStore = [VariableStore sharedInstance];
所以你可以这样做:
[vStore setEvTe:2];
NSLog(@"value testing, %i", [vStore evTe]);
并留意马特所说的关于你的单身人士的事情;)
答案 2 :(得分:1)
我认为在nslog中你不仅要输出evTe,还要输出[[VariableStore sharedInstance] evTe]。
答案 3 :(得分:0)
首先,您必须以两种控制器都可以访问的方式在函数外部声明静态变量。
static VariableStore* myInstance = nil;
singleton sharedInstance应为:
if(myInstance == nil)
{
myInstance = [[VariableStore] alloc] init];
}
return myInstance;