在2个ViewControllers之间共享变量

时间:2010-08-25 07:20:14

标签: iphone objective-c

这对你们来说很简单。我正在定义一个存储变量的类,所以我可以在不同的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中重用它。

4 个答案:

答案 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;