在没有新Init的情况下使用来自类的数据

时间:2012-08-14 02:16:26

标签: objective-c ios cocoa-touch class uiviewcontroller

我有一个TabBar布局,在Home选项卡中我有一个按钮“Connect”,按下时会向TransferViewController类发送一个动作以创建一个GameKit Session。然后我有另一个名为Send的标签,其中有一个按钮,上面写着“发送文件”,当按下该按钮时,会向TransferViewController类发送一个动作,该类使用了使用connect设置的“Session”变量来发送文件,但由于它是一个不同的选项卡它会创建一个新的Controller实例,它希望我再次连接,但按钮位于主页选项卡上。

无论如何,我可以为两个标签设置一个Controller而不需要两个实例吗?我希望用户单击“主页”选项卡上的“连接”,然后切换到“发送”选项卡,然后按“发送文件”,并使用另一个选项卡上的“连接”设置变量。如果这令人困惑,我很抱歉。

1 个答案:

答案 0 :(得分:2)

这根本不会让人感到困惑 - 实际上,这种情况一直存在。它在模型 - 视图 - 控制器系统中的工作方式是,您可以设置模型类,使其成为单例,并在需要共享数据的所有控制器中添加对该单例的引用。

Model.h

@interface Model : NSObject
@property (nonatomic, readwrite) Session *session;
-(id)init;
+(Model*)instance;
@end

Model.m

@implementation Model
@synthesize isMultiplayer;

-(id)init {
    if(self=[super init]) {
        self.session = ...; // Get the session
    }
    return self;
}

+(Model*)instance {
    static dispatch_once_t once;
    static Model *sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
@end

现在,您可以在控制器代码中使用共享会话:import "Model.h",然后编写

[[Model instance].session connect];
[[Model instance].session sendAction:myAction];