6

static で UISwitch を使用しているときに問題が発生しましたUITableViewUISwitchアプリの読み込み時に特定の の最後の状態を復元する必要がありますが、 の状態を確認するたびにIBOutletnil です。変数を手動で割り当てようとしましたが、これも役に立ちませんでした。

これが私がやっていることです:

SettingsController.h

//IBOutlet connected correctly
@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail;

SettingsController.m

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (!_switch_displayDetail) {
        NSLog(@"_switch_displayDetail is NIL"); //This is always displayed
    }

    //Switch is default to YES, I am trying to set it to NO
    //This line does nothing...
    [_switch_displayDetail setOn:[dataManager shouldDisplayDetail] animated:YES];
}

状態を確認すると、他のどこでも_switch_displayDetailnilです。すべての超初期化メソッドを呼び出しています。iOS 6.1 で何か変更がありましたか?

[編集] 合成変数の使用も機能しません。

[編集 2] 問題が Xcode または iPhone シミュレーターのバグであることがわかりました。私の iPod touch でテストしたところ、最初のアルゴリズムは完全に機能しました。

私はこの問題に夢中になっています...

4

3 に答える 3

1

皆さんの回答に感謝しますが、あきらめそうになった後、iPod touch でアプリをテストしたところ、完全に機能しました。これは、iPhone シミュレーターのバグのように見えますが、おそらく Xcode のバグのようです (特に目新しいものはありません)。iPhone Simulator メニューのすべての設定とデータをリセットした後、そこでも機能しました。

したがって、夢中になる前に、実際のデバイスでアプリをテストしてください

于 2013-02-04T16:25:11.270 に答える
1

これらのトワイライト ゾーンの問題がどれほど苛立たしいものであるかを、私は身をもって知っています。診断するには明らかに情報が少なすぎますが、デバッグにどのようにアプローチするかを共有したいと思いました。

  1. switch_displayDetail のセッターをオーバーライドし、値をログに記録するだけでなく、self
  2. 次にviewWillAppear、同じことをログに記録します

ここで同じインスタンスについて話しているのではない気がします。私が正しければ、セッターは値を表示しますが、表示しませんviewWillAppear。私が間違っている場合、両方とも nil になります。その場合、正しいinitメソッドを呼び出していないか、IB でリンケージが正しくありません。

ちょうど私の2セント。

于 2013-02-04T13:38:23.737 に答える
-1

初め :

@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail; // should be a weak property

そして、あなたはあなたの財産を@合成しましたか?

于 2013-02-04T13:57:18.017 に答える