2011-06-28 6 views
1

私はセグメント化されたコントロールにユーザー設定を読み込もうとしています。 NSUserDefaultが正しく読み込まれ、設定が正しくインデックスに変換されます。ただし、セグメント化されたコントロールはインデックスの設定に応答しないように見えます。UISegmentedControl:プログラムでインデックスを設定しますか?

コードクリーンは-Wall -Wextraでコンパイルされ、clangは問題を報告しません。私はリークとゾンビの両方で走っています - OK。以下のASSERTsは発砲しません。

UISegmentedControlはInterface Builderを使用して作成されました(ビューに合計4つあります)。私は接続を確認しました。私は-loadPreferences-viewDidLoad-viewWillAppear、そして-viewDidAppearと呼ぶことを試みました。

私は行方不明がありますか? needsUpdateまたは他の方法でコントロールを再描画する必要がありますか?ジェフ

-(void)loadPreferences 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    ... 

    int days = [userDefaults integerForKey:kDirtyAfter]; 
    ASSERT(IsValidDirtyDays((DirtyDays)days)); 
    if(!IsValidDirtyDays((DirtyDays)days)) 
     days = (int)DirtyDaysDefault; 

    int idx; 
    switch(days) 
    { 
     case DirtyDays1: idx = 0; break; 
     case DirtyDays3: idx = 1; break; 
     case DirtyDays7: idx = 2; break; 
     case DirtyDays14: idx = 3; break; 
     case DirtyDays28: idx = 4; break; 
     default: idx = 1; 
    } 

    // dirtyAfterSegment.selectedSegmentIndex = idx; 
    [dirtyAfterSegment setSelectedSegmentIndex:idx]; 
    ASSERT(dirtyAfterSegment.selectedSegmentIndex == idx); 
} 

答えて

1

アサートが起動しない場合は

は、その後、何かが、このコードの後に​​0にインデックスを変更しなければならない、またはコード自体は、常に最初のcase文を使用しています。

セグメントのvalueChangedにアクションを作成し、そのアクションにブレークポイントを設定して、セグメントが変更されているときと変更しているときを確認します。

+0

ありがとうKendall。私はコピー&ペーストを指でつまんで、 ' - valueChanged'に現れました。 – jww

0

インターフェースビルダーでセグメント化されたコントロールを作成したとします。それらのIBOutletを作成して接続しましたか?

関連する問題