2

TabBar レイアウトがあり、[ホーム] タブには [接続] ボタンがあり、これを押すと、TransferViewController クラスにアクションが送信され、GameKit セッションが作成されます。次に、「Send File」というボタンがあるSendという別のタブがあり、これを押すと、ファイルを送信するために接続を使用して設定された「Session」変数を使用するクラスTransferViewControllerにもアクションが送信されますが、それは異なるためですコントローラーの新しいインスタンスを作成し、再度接続する必要がありますが、ボタンは[ホーム]タブにあります。

2 つのインスタンスを持たなくても、2 つのタブに 1 つの Controller を使用できる方法はありますか? ユーザーが [ホーム] タブで [接続] をクリックしてから、[送信] タブに切り替えて [ファイルの送信] を押し、別のタブで [接続] によって設定された変数を使用するようにします。これが紛らわしい場合は申し訳ありません。

4

1 に答える 1

2

これはまったく混乱を招くものではありません。実際、これは常に出てきます。モデル ビュー コントローラー システムでこれが機能する方法は、モデル クラスをセットアップし、それをシングルトンにして、データを共有する必要があるすべてのコントローラーでそのシングルトンへの参照を追加することです。

Model.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 に答える