2

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

无论如何,我可以在没有两个实例的情况下为两个选项卡设置一个控制器吗?我希望用户单击“主页”选项卡上的连接,然后切换到“发送”选项卡并按“发送文件”并通过另一个选项卡上的连接使用变量设置。如果这令人困惑,我很抱歉。

4

1 回答 1

2

这一点也不令人困惑——事实上,这一直都在出现。这在模型-视图-控制器系统中的工作方式是您设置一个模型类,使其成为单例,并在需要共享数据的所有控制器中添加对该单例的引用。

模型.h

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

模型.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"和 write

[[Model instance].session connect];
[[Model instance].session sendAction:myAction];
于 2012-08-14T02:46:20.313 回答