0

タブバー項目を含む TabBar Controller があります。

ユーザーがタブ バーの項目を初めてタップしたときに、アラート ビューを開いて、ユーザーがちょっとしたヒントを読めるようにしたいと考えています。

いくつかのブール値 (CONFIG.tip1AlreadySeen、CONFIG.tip1AllreadySeen など) を保持するグローバル変数 (CONFIG など) があります。これらのブール値はすべて NO に初期化されます。

ユーザーがタブ バー項目をタップすると、ビュー コントローラーの viewWillAppear メソッドが実行されます。このメソッドでは、次のようなコードを入れます。

-(void) viewVillAppear: (BOOL) animated {
    extern CONFIG; // <- it's not the actual code but it indicates that a global variable must be used

    [super viewWillAppear: animated];

    if(CONFIG.tip1AlreadySeen == NO) {
        CONFIG.tip1AlreadySeen = YES;

        // code for showing the alertview
    }    
}

奇妙なことに、このコードは 1 つのビュー コントローラーでは完全に機能しますが、別のビュー コントローラーでは機能しません。

いくつかのデバッグで、別のviewcontrollerでコードが実行されていることがわかりましたが、割り当てCONFIG.tipAlreadySeen = YESはCONFIG.tipAlreadySeenの実際の値を変更しません。この値はまだ NO です。信じられない!!!

ちょっとした回避策は、viewDidAppear メソッドを使用して値を変更することでした。

-(void) viewVillAppear: (BOOL) animated {
    extern CONFIG; // <- it's not the actual code but it indicates that a global variable must be used

    [super viewWillAppear: animated];

    if(CONFIG.tip1AlreadySeen == NO) {
        // code for showing the alertview
    }    
}

-(void) viewDidAppear: (BOOL) animated {
    extern CONFIG;
    CONFIG.tip1AlreadySeen = YES;
}

…でも、何が起こったのか本当に分からなかった!!! あなたの誰かがこの行動を説明できますか?

前もって感謝します!

マルコ

4

1 に答える 1

0

なぜこれはグローバルであり、View Controller 自体に含まれていない必要があるのですか? 切り替えられるView Controllerの単純なBOOL@propertyです。そして、アプリケーションの複数回の実行でこの永続性を維持するには、結果を NSUserDefaults に保存し、View Controller を起動するたびに確認します。

于 2011-11-06T11:16:28.040 に答える