我有一个 TabBar 布局,在“主页”选项卡中我有一个“连接”按钮,按下该按钮时会向 TransferViewController 类发送一个操作以创建 GameKit 会话。然后我有另一个名为“发送”的选项卡,其中有一个按钮,上面写着“发送文件”,按下该按钮时,会向 TransferViewController 类发送一个操作,该类还使用使用 connect 设置的“会话”变量来发送文件,但因为它是不同的它创建了一个新的控制器实例,并希望我再次连接,但该按钮位于“主页”选项卡上。
无论如何,我可以在没有两个实例的情况下为两个选项卡使用一个控制器吗?我希望用户单击“主页”选项卡上的“连接”,然后切换到“发送”选项卡,然后按“发送文件”并使用另一个选项卡上的连接设置的变量。如果这令人困惑,我很抱歉。
这一点也不令人困惑——事实上,这种情况一直都会出现。在模型-视图-控制器系统中的工作方式是,您设置一个模型类,使其成为单例,并在需要共享数据的所有控制器中添加对该单例的引用。
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];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)