2017-02-13 4 views
0

XIB 내에서 NSObjectController에 대한 바인딩을 사용합니다. NSObjectController의 새 내용 객체를 설정하면 변경되지 않는 유일한 텍스트 필드 값은 첫 번째 응답자가있는 것입니다. 모델은 문제없이 변경됩니다.바인딩은 NSTextField를 업데이트하지 않습니다.

getter/setter를 사용하지 않으면 firstResponder (isBeingEdited)가있는 텍스트 필드가 변경되지 않고 변경됩니다.

내 KVC KVO의 문제점은 무엇입니까?

내 맞춤 getter/setter가 아래 그림입니다. 추 신 : 콘텐트 개체를 변경하기 전에 창을 첫 번째 응답자로 만들고 싶지 않습니다.

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

enter image description here

은 내가 NSTextField있는 업데이트 차단 최소/최대 값을 사용 NSNumberFormatter 잊고.

enter image description here

관련 문제