2017-02-13 4 views
0

XIB内のNSObjectControllerへのバインディングを使用します。 NSObjectControllerの新しいコンテンツオブジェクトを設定すると、変更されない唯一のテキストフィールド値は最初のレスポンダを持つものです。モデルは問題なく変更されます。バインディングはNSTextFieldを更新しません

私がカスタムゲッター/セッターを使用しないと、firstResponder(isBeingEdited)を持つテキストフィールドが問題なく変更されます。

私のKVC、KVOの何が問題なのですか?

私のカスタムゲッター/セッターは下にあります。 PS:コンテンツオブジェクトを変更して機能させる前に、ウィンドウを最初のレスポンダにしたくありません。

enter image description here

static const CGFloat MMsInOneInch = 25.4; 
static const CGFloat inchesInOneMM = 0.0393700787402; 
- (void)setPaperWidth:(CGFloat)paperWidth 
{ 
    [self willChange]; 
    CGFloat newWidth = paperWidth * [self conversionKoeficientToDefaultUnitType]; 
    if (!_isChangingPaperSize) { 
     if (self.paperSize == PPPaperSizeA4 && fabs(newWidth - widthSizeOfA4) > 0.001) { 
      [self setPaperSize:PPPaperSizeCustom]; 
     } 
     if (self.paperSize == PPPaperSizeUSLetter && fabs(newWidth - widthSizeOfUSLetter) > 0.001) { 
      [self setPaperSize:PPPaperSizeCustom]; 
     } 
    } 
    [self willChangeValueForKey:@"paperWidth"]; 
    _paperWidth = newWidth; 
    [self didChangeValueForKey:@"paperWidth"]; 
    [self didChange]; 
} 


- (CGFloat)conversionKoeficientToDefaultUnitType 
{ 
    if ([self defaultUnitType] == [self unitType]) { 
     return 1; 
    } 
    if ([self defaultUnitType] == PPPrintSettingsUnitTypeMM) { 
     return MMsInOneInch; 
    } 
    if ([self defaultUnitType] == PPPrintSettingsUnitTypeInch) { 
     return inchesInOneMM; 
    } 
    return 1; 
} 

- (CGFloat)paperWidth 
{ 
    return _paperWidth/[self conversionKoeficientToDefaultUnitType]; 
} 

答えて

0

私が更新するNSTextFieldブロッキング最小/最大値とNSNumberFormatterを使用することを忘れてしまいました。

enter image description here

関連する問題